Schemas 表规则

124 阅读2分钟

文档日期: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