http://mongoosejs.com/docs/api.html
Schemas:可以理解为一个类,这个类是对数据库里面存储的结构的一个映射,除了描述以为你也可以为它定义操作。
1.创建:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
var Blog = mongoose.model('Blog', blogSchema);
2.非静态方法:
var animalSchema = new Schema({ name: String, type: String });
animalSchema.methods.findSimilarTypes = function (cb) {
return this.model('Animal').find({ type: this.type }, cb);
}
var Animal = mongoose.model('Animal', animalSchema);
var dog = new Animal({ type: 'dog' });
dog.findSimilarTypes(function (err, dogs) {
console.log(dogs); // woof
});
非静态方法的好处很直观,就是通过内部传参的方式,简化调用的时候的输入。
3.静态方法:
PersonSchema.statics.findByName = function(name,cb){
this.find({name:new RegExp(name,'i'),cb});
}
var PersonModel = mongoose.model('Person',PersonSchema);
PersonModel.findByName('krouky',function(err,persons){
//找到所有名字叫krouky的人
});
关键是使用的模式,然后就是什么时候我们需要使用静态方法这种模式,说白了就是默认方法不够用的时候。
4.虚拟属性:
personSchema.virtual('name.full').get(function () {
return this.name.first + ' ' + this.name.last;
});
为Schema增加一个新的属性,这个属性是其他属性的合成。
5.Options配置项:
var ExampleSchema = new Schema(config,options);
这些配置是用来指定操作数据库的规则的。
5.1autoIndex: false
var schema = new Schema({..}, { autoIndex: false });
var Clock = mongoose.model('Clock', schema);
Clock.ensureIndexes(callback);
如果想自己指定索引生成的规则,可以选择不使用自动索引,默认是选择自动索引的
5.2option: bufferCommands
没搞懂
5.3 capped
new Schema({..}, { capped: 1024 });
new Schema({..}, { capped: { size: 1024, max: 1000, autoIndexId: true } });
限制批量操作的数量
5.4 option: 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
如果不想要自动生成的id可以直接设置为false。
Model:是由mongoose根据Schema加工而成的,你可以把它理解为操作数据库的DAO层,只是这个DAO有很多mongoose默认帮我们添加的方法。
var Tank = mongoose.model('Tank', yourSchema);
var small = new Tank({ size: 'small' });
1.增加:
small.save(function (err) {
if (err) return handleError(err);
// saved!
})
Tank.create({ size: 'small' }, function (err, small) {
if (err) return handleError(err);
// saved!
})
这里的create是类的方法,save是对象的方法,他们是等价的。
2.查询:
不写了,http://mongoosejs.com/docs/api.html API文档写的很详细