MongooseMongoDB 异步模型工具
Mongoose 是设计用于异步环境的 MongoDB 对象模型工具,支持 promises 和 callbacks。
概述
连接到 MongoDB
首先需要定义一个连接。如果应用仅使用一个数据库,则使用mongoose.connect
。如果需要创建其他连接,请使用mongoose.createConnection
。
connect
和 createConnection
都使用 mongodb://
URI,或者 host, database, port, options
参数。
await mongoose.connect('mongodb://localhost/my_database');
连接后,open
将在Connection
实例上触发该事件。
注意: 如果本地连接失败,请尝试使用 127.0.0.1 而不是 localhost,更改本地主机名可能会出现问题。
Mongoose 会缓冲所有命令,直到它连接到数据库,这意味着不必等到它连接到 MongoDB 才开始定义模型、运行查询。
定义模型
模型是通过 Schema 接口定义的:
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;
const BlogPost = new Schema({
author: ObjectId,
title: String,
body: String,
date: Date
});
除了定义文档的结构和存储的数据类型之外,Schema 还处理以下定义:
以下是上述功能的一些用法:
const Comment = new Schema({
name: { type: String, default: 'hahaha' },
age: { type: Number, min: 18, index: true },
bio: { type: String, match: /[a-z]/ },
date: { type: Date, default: Date.now },
buff: Buffer
});
// a setter
Comment.path('name').set(function (v) {
return capitalize(v);
});
// middleware
Comment.pre('save', function (next) {
notify(this.get('email'));
next();
});
查看examples/schema/schema.js
示例中的典型设置端到端示例。
访问模型
一旦我们通过 mongoose.model('ModelName', mySchema)定义了一个模型,就可以通过相同的函数访问它:
const MyModel = mongoose.model('ModelName');
或者一次性完成:
const MyModel = mongoose.model('ModelName', mySchema);
第一个参数是模型所针对的集合的单数名称。Mongoose 会自动查找模型名称的复数形式。例如:
const MyModel = mongoose.model('Ticket', mySchema);
Mongoose 会为 tickets 集合建立模型,而不是 ticket 集合。
一旦我们有了模型,就可以实例化并保存它:
const instance = new MyModel();
instance.my.key = 'hello';
instance.save(function (err) {
//
});
可以从同一个集合中找到文档
MyModel.find({}, function (err, docs) {
// docs.forEach
});
评论