Sequelize 与 MongoDB 的连接和数据操作实例

在前端开发中,我们经常需要使用数据库来存储和管理数据。而在数据库的选择上,关系型数据库和非关系型数据库是两个主要的选择。Sequelize 是一个基于 Node.js 的 ORM 框架,主要用于操作关系型数据库,而 MongoDB 则是一个非关系型数据库。本文将介绍如何使用 Sequelize 连接 MongoDB 并进行数据操作。

连接 MongoDB

使用 Sequelize 连接 MongoDB 需要使用一个叫做 sequelize-mongodb 的插件。首先需要安装该插件:

npm install sequelize-mongodb

然后在代码中引入:

const Sequelize = require('sequelize');
const SequelizeMongoDB = require('sequelize-mongodb');

接着创建 Sequelize 实例,并使用 SequelizeMongoDB 连接 MongoDB:

const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'mongodb',
  host: 'localhost',
  port: 27017,
  logging: false,
  dialectOptions: {
    useUnifiedTopology: true,
  },
});
const mongoConnection = new SequelizeMongoDB('mongodb://localhost:27017/database', {
  sequelize,
});

其中,database 是 MongoDB 的数据库名称,usernamepassword 是 MongoDB 的用户名和密码。dialect 设置为 mongodbhostport 分别设置为 MongoDB 的地址和端口号。logging 设置为 false 可以关闭日志输出,dialectOptions 中设置 useUnifiedTopologytrue 可以使用 MongoDB 的新连接方式。

定义数据模型

接下来需要定义数据模型。由于 MongoDB 是非关系型数据库,没有表的概念,因此需要使用 Model 来定义数据模型。Model 可以看做是 MongoDB 中的一个文档。

const User = sequelize.define('User', {
  name: Sequelize.STRING,
  age: Sequelize.INTEGER,
  email: Sequelize.STRING,
}, {
  timestamps: false,
  underscored: true,
  sequelize,
  modelName: 'User',
  collection: 'users',
});

其中,User 是模型名称,nameageemail 是模型属性。timestamps 设置为 false 可以关闭自动生成的时间戳属性,underscored 设置为 true 可以将属性名转换为下划线风格。sequelize 设置为之前创建的 Sequelize 实例,modelName 设置为模型名称,collection 设置为 MongoDB 中的集合名称。

数据操作

定义好数据模型后,就可以进行数据操作了。下面是一些常用的数据操作示例。

创建文档

await User.create({
  name: 'Alice',
  age: 20,
  email: 'alice@example.com',
});

查询文档

const users = await User.findAll({
  where: {
    age: {
      [Op.gt]: 18,
    },
  },
});

更新文档

await User.update({
  name: 'Bob',
}, {
  where: {
    name: 'Alice',
  },
});

删除文档

await User.destroy({
  where: {
    name: 'Alice',
  },
});

总结

本文介绍了如何使用 Sequelize 连接 MongoDB 并进行数据操作。首先需要使用 sequelize-mongodb 插件连接 MongoDB,然后定义数据模型并进行数据操作。希望本文能够对前端开发者使用 Sequelize 操作 MongoDB 有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65bee54cadd4f0e0ff86af9e