MongooseMongoDB 异步模型工具

联合创作 · 2023-09-30 18:10

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
});
浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报