文档日期:2021/2/2
参考文档:mongoose 5.x中文文档 链接地址
文档记录:刘俊雄
定义一个schema
Mongoose 的一切始于 Schema。每个 schema 都会映射到一个 MongoDB collection ,并定义这个collection里的文档的构成。
// 引入 mongoose 模块
var mongoose = require('mongoose');
// 调用 mongoose 的 Schema
var Schema = mongoose.Schema;
// 实例化 Schema 并 传入一个 对象 规则
var blogSchema = new Schema({
title: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
在这之后你还想添加 keys 的话, 请使用 Schema#add 方法。
var ToySchema = new Schema;
ToySchema.add({ name: 'string', color: 'string', price: 'number' });
允许使用的 表规则类型 有:
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
全部可用
-
required: 布尔值或函数 如果值为真,为此属性添加 required 验证器
-
default: 任何值或函数 设置此路径默认值。如果是函数,函数返回值为默认值
-
select: 布尔值 指定 query 的默认 projections
-
validate: 函数 adds a validator function for this property
-
get: 函数 使用 Object.defineProperty() 定义自定义 getter
-
set: 函数 使用 Object.defineProperty() 定义自定义 setter
-
alias: 字符串 仅mongoose >= 4.10.0。 为该字段路径定义虚拟值 gets/sets
再看一次
// 引入 mongoose 模块
var mongoose = require('mongoose');
// 调用 mongoose.Schema
var userSchema = new mongoose.Schema({
// 类型简写
username:String,
password:{
// 类型
type:String,
// 是否必填
required:true
},
// 简写
age:Number,
autograph:{
// 类型
type:String,
// 默认值
default:'这是我的个性签名'
}
})
创建一个 model
我们要把 schema 转换为一个 Model, 使用 mongoose.model(modelName, schema) 函数:
var Blog = mongoose.model('Blog', blogSchema);
索引(index)
MongoDB 支持 secondary indexes. 在 mongoose 中,我们在 Schema 中定义索引。索引分字段级别和schema级别, 复合索引 需要在 schema 级别定义。
var animalSchema = new Schema({
name: String,
type: String,
tags: { type: [String], index: true } // field level
});
animalSchema.index({ name: 1, type: -1 }); // schema level
索引相关
你可以使用 schema type 选项定义MongoDB indexes。
-
index: 布尔值 是否对这个属性创建索引
-
unique: 布尔值 是否对这个属性创建唯一索引
-
sparse: 布尔值 是否对这个属性创建稀疏索引
ObjectIds
要指定类型为 ObjectId,在声明中使用 Schema.Types.ObjectId。
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var Car = new Schema({ driver: ObjectId });
// or just Schema.ObjectId for backwards compatibility with v2