mongoose 文档粗译
mongoose.model('Project', ProjectSchema); var Project = mongoose.model('Project'); // ready to go!
上面代码可以合并成一行,返回的就是 model 对象。 下面进行的实例化,如果添加了方法,实例化后就带有对应的方法 比较类似原型继承 var Project = mongoose.model('Project', ProjectSchema);
可以为模型添加方法 注意不要覆写了 mongoose 提供的默认方法,覆写后可能会出现不可预见的错误,俗称坑 @example Project.methods.findSimilarTypes = function(cb) { return this.model('Animal').find({ type: this.type}, cb); }
在模型上添加静态方法的方式也比较类似 @example animalSchema.statics.findByName = function (name, cb) { this.find({ name: new RegExp(name, 'i') }, cb); } 实例化后用同样地方式调用
建立二级 索引 var animalSchema = new Schema({ name: String, type: String, tags: { type: [String], index: true } // field level });
animalSchema.index({ name: 1, type: -1 }); // schema level
在应用启动的时候,Mongoose会自动调用ensureIndex方法对各个schema,这样对开发而言比较友好 但是在声场环境的话可以把这个功能关闭掉,因为创建索引会引起明显的性能问题, 关闭的方法如下 @example animalSchema.set('autoIndex', false); or new Schema({..}, { autoIndex: false });
虚拟字段,在 mongoose 中用于便于字段的的格式化和合并,它不会被存到数据库中 比如在处理姓和名的情况下,要是希望快速调用姓和名合并在一起的姓名字段,就可以使用这个特性
personSchema.virtual('name.full').get(function () { return this.name.first + ' ' + this.name.last; });
定义模型的时候可以传一些参数 new Schema({..}, options);
or
var schema = new Schema({..}); schema.set(option, value);
参数:bufferCommands 当运行mongo 的设备的自动重连功能被关闭,只连接一台mongo服务器,如果和服务器的连接断开, 就会触发 mongoose的bufferCommands直到重新连上mongo,要关闭这个功能的话给这个参数传个 false
option: collection 可以调整 collection的名称
option: id 是否开启 uuid 的 _id 字段自动转成 id 字段的功能。 // default behavior var schema = new Schema({ name: String }); var Page = mongoose.model('Page', schema); var p = new Page({ name: 'mongodb.org' }); console.log(p.id); // '50341373e894ad16347efe01'
// disabled id var schema = new Schema({ name: String }, { id: false }); var Page = mongoose.model('Page', schema); var p = new Page({ name: 'mongodb.org' }); console.log(p.id); // undefined
参数 option: _id