1. 什么是 Mongoose
Mongoose 是一个优秀的 Node.js ORM 框架,可以为 MongoDB 提供非常好的 Node.js 需求支持。它是基于 MongoDB 的一个对象建模工具,可以在异步环境下执行验证、查询、存储等操作。Mongoose 为 Node.js 操作 MongoDB 提供了一些简单的帮助函数,使得开发过程更加高效。它支持将数据通过 Schema 来进行建模,并且提供了对数据进行查询、验证和文档映射的功能。
2. 在 Egg 中安装 Mongoose
2.1 安装依赖
Mongoose 需要在 Egg 项目中安装 mongoose 和 egg-mongoose 两个依赖:
npm install mongoose --save
npm install egg-mongoose --save
2.2 配置插件
在 Egg 项目的 config/plugin.js 文件中添加 egg-mongoose 插件配置:
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
2.3 配置连接
在 Egg 项目的 config/config.${env}.js 文件中添加 Mongoose 的连接配置:
exports.mongoose = {
client: {
url: 'mongodb://localhost:27017/mydatabase', // 数据库连接地址
options: {
useNewUrlParser: true,
},
},
};
3. 定义 Schema
在 Mongoose 中定义 Schema 就是定义数据库中的数据结构,Mongoose 的所有操作都是基于 Schema 进行的。可以通过 Mongoose.Schema() 构造函数来定义 Schema。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// 定义 Schema
const mySchema = new Schema({
name: String,
age: Number,
email: String,
});
// 将 Schema 转换为 Model
const myModel = mongoose.model('myCollection', mySchema);
module.exports = myModel;
上述代码中的 myCollection 表示数据库集合的名称,如果没有指定集合名称,则默认使用模型名称的小写复数作为集合名称进行操作。
4. CRUD 操作
4.1 创建数据
可以使用 Model.create() 方法来创建数据,示例如下:
const myModel = require('path/to/myModel');
// 创建数据对象
const newData = new myModel({
name: '张三',
age: 25,
email: 'zhangsan@qq.com',
});
// 将数据保存到数据库
newData.save((err, doc) => {
if (err) {
console.error(err);
return;
}
console.log(doc);
});
4.2 查询数据
可以使用 Model.find() 方法来查询数据,示例如下:
const myModel = require('path/to/myModel');
// 查询数据
myModel.find({ age: { $gte: 18 } }, (err, docs) => {
if (err) {
console.error(err);
return;
}
console.log(docs);
});
其中 $gte 表示大于等于的条件。
4.3 更新数据
可以使用 Model.updateOne() 或 Model.updateMany() 方法来更新数据,示例如下:
const myModel = require('path/to/myModel');
// 更新一条数据
myModel.updateOne(
{ name: '张三' },
{ email: 'zhangsan@update.com' },
(err, doc) => {
if (err) {
console.error(err);
return;
}
console.log(doc);
}
);
// 更新多条数据
myModel.updateMany(
{ age: { $gte: 18 } },
{ name: '成年人' },
(err, doc) => {
if (err) {
console.error(err);
return;
}
console.log(doc);
}
);
4.4 删除数据
可以使用 Model.deleteOne() 或 Model.deleteMany() 方法来删除数据,示例如下:
const myModel = require('path/to/myModel');
// 删除一条数据
myModel.deleteOne({ name: '张三' }, (err, doc) => {
if (err) {
console.error(err);
return;
}
console.log(doc);
});
// 删除多条数据
myModel.deleteMany({ age: { $gte: 18 } }, (err, doc) => {
if (err) {
console.error(err);
return;
}
console.log(doc);
});
5. 总结
Mongoose 是一个非常好用的 Node.js ORM 框架,它能够便捷地连接、操作 MongoDB 数据库,其语法也比原生的 MongoDB 语法更加简洁易懂。在 Egg 项目中使用 Mongoose,只需要安装相应的依赖,进行简单的配置即可使用。