什么是ORM?
ORM全称Object-Relational Mapping,翻译成中文叫作对象关系映射。ORM是一种程序设计技术,它将对象和关系数据库之间的映射进行自动化,简化了代码的编写,使程序更易于维护。
ORM可以轻松地将JavaScript中的对象转换成数据库中的表并进行CRUD操作,读写数据库就像操作对象一样简单。
为什么选择Sequelize作为ORM框架?
Sequelize是一款针对Node.js中的关系型数据库的ORM框架。它支持多种数据库,包括MySQL、PostgreSQL和SQLite等,同时它也支持NoSQL数据库MongoDB。
Sequelize具有模型定义、模型同步、模型关系、事务、查询等多种功能,它还提供了良好的错误处理机制,是一个非常成熟可靠的ORM框架。因此选择Sequelize作为ORM框架很适合在Node.js中操作MongoDB。
如何在Node.js中使用Sequelize操作MongoDB?
在使用Sequelize操作MongoDB之前,需要先安装mongoose、sequelize和mysql2等包。接下来我们就来一步步讲解如何使用Sequelize操作MongoDB。
1. 定义模型(Model)
在使用Sequelize操作MongoDB之前,需要先定义一个模型(Model),用于描述数据表的结构。一个简单的User模型的定义如下:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const Sequelize = require('sequelize'); const { STRING, INTEGER } = Sequelize.DataTypes; const User = mongoose.Schema({ name: { type: STRING, }, age: { type: INTEGER, }, });
2. 配置Sequelize
Sequelize需要与MongoDB进行连接,我们需要为Sequelize配置一个连接选项。一个简单的sequelize配置文件如下:
// javascriptcn.com 代码示例 const Sequelize = require('sequelize'); const sequelize = new Sequelize('test', 'root', 'password', { dialect: 'mysql', host: 'localhost', port: '3306', }); module.exports = sequelize;
3. 同步模型(Model)
在定义完模型(Model)后,我们需要利用模型同步机制同步模型与数据库之间的关系,建立表和字段的映射。代码示例如下:
// javascriptcn.com 代码示例 const sequelize = require('./index'); const User = require('./model/user'); async function sync() { await User.sync({ force: true }); console.log('同步 finished'); } sync();
User.sync()
中{force: true}
表示每次同步都会清空数据表中原本的数据并重新创建表。
4. 查询数据
Sequelize提供了多种数据查询方法,这里介绍一下常用的find方法。我们可以通过以下代码查询到数据库中所有用户的信息。
const User = require('./model/user'); async function getUsers() { const users = await User.findAll(); console.log(users); } getUsers();
5. 插入数据
插入数据也是我们在使用Sequelize操作MongoDB时经常用到的功能。我们可以通过以下代码插入一条用户信息数据:
// javascriptcn.com 代码示例 const User = require('./model/user'); async function addUser() { const user = await User.create({ name: '莉莉', age: 20, }); console.log(user.toJSON()); } addUser();
6. 更新数据
更新数据也是常用的功能,我们可以通过以下代码更新用户的信息:
const User = require('./model/user'); async function updateUser() { const user = await User.findOne({ where: { name: '莉莉' } }); const updatedUser = await user.update({ age: 21 }); console.log(updatedUser.toJSON()); } updateUser();
7. 删除数据
删除数据也是我们经常使用的一个功能。我们可以通过以下代码删除指定的用户信息:
const User = require('./model/user'); async function deleteUser() { const user = await User.findOne({ where: { name: '莉莉' } }); await user.destroy(); console.log('删除数据成功'); } deleteUser();
8. 代码完整演示:
最后附上一段完整的示例代码:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const Sequelize = require('sequelize'); const { STRING, INTEGER } = Sequelize.DataTypes; const sequelize = new Sequelize('test', 'root', '123456', { dialect: 'mysql', host: 'localhost', port: '3306', }); const User = sequelize.define('user', { name: { type: STRING, }, age: { type: INTEGER, }, }); (async () => { await User.sync({ force: true }); // same as sequelize.sync({ force: true }) const users = [ { name: 'Tom', age: 18 }, { name: 'Jerry', age: 19 }, { name: 'John', age: 20 }, ]; for (let user of users) { await User.create(user); } const userList = await User.findAll(); console.log(userList); process.exit(); })();
运行以上代码后,我们就可以在控制台中看到我们插入的数据了。
总结
使用Sequelize操作MongoDB是一种非常快捷方便的ORM操作方式,它将JavaScript中的对象转换成数据库中的表并进行CRUD操作,读写数据库就像操作对象一样简单。因此,我们可以把更多的时间和精力放在业务逻辑的开发上,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65484e847d4982a6eb29535c