Mongoose 是什么
MongoDB.js 是一个官方提供的访问 MongoDB 的 js 库。Mongoose.js 是在 MongoDB.js 基础上的一个封装。后面 Mongoose 即指谓 Mongoose.js。
基本概念
Schema
Schema 是一个与 MongoDB 里的某个 Collection 对应并且规定了 Collection 里 Document 的 shape 的东西。在 Mongoose 里,一切都始于 Schema。一个 schema 实例由 Schema 构造函数创建:
const mongoose = require('mongoose')
const schema = new mongoose.Schema({
field1: SchemaType,
field2: SchemaType
// ...
})
SchemaType
SchemaType 是一个配置 field 的对象,它规定了一个 field 值的 type、getter/setter、对这个 field 进行赋值的时候的 validator 等等。type 包括 String、Number、Date、Buffer、Boolean、Mixed、ObjectId、Array、Decimal128、Map,也可以通过 plugin 自定义。一个具体的 schemaType 基本可以表示为:
const schemaType = {
type: String,
...SchemaTypeOptions
}
// 当没有 SchemaTypeOptions 时与下面等价
const schemaType1 = String
Model
调用 mongoose.model(modelName, schema) 得到的结果就是一个 model,所有对 collection 的操作都是基于 model 执行。
const schema = new mongoose.Schema({ name: String, size: String });
const Tank = mongoose.model('Tank', schema);
上述代码定义了一个 schema,然后基于这个 schema 生成了一个 model:Tank,Tank 对应 MongoDB 里的一个 collection:tanks(Tank 的小写复数形式)。
使用 Mongoose
const mongoose = require('mongoose')
// option 既可以写在第一个参数的 query 里,也可以放在第二个参数
mongoose.connect('mongodb://username:password@host:port/database?options...', options)
const db = mongoose.connection
// 对数据库的访问操作写到 callback 里
db.on('connected', callback)