2016-09-26 45 views

回答

21

數據庫邏輯應封裝在數據模型中。 Mongoose提供了兩種方法來完成這個任務,方法和靜態。 方法向文檔添加實例方法,而靜態將靜態「類」方法添加到模型本身。

給出的例子動物以下型號:

var AnimalSchema = mongoose.Schema({ 
 
    name: String, 
 
    type: String, 
 
    hasTail: Boolean 
 
}); 
 

 
module.exports = mongoose.model('Animal', AnimalSchema);

我們可以添加找到類似類型的動物的方法,和一個靜態方法來找到所有的動物尾巴:

AnimalSchema.methods.findByType = function (cb) { 
 
    return this.model('Animal').find({ type: this.type }, cb); 
 
}; 
 

 
AnimalSchema.statics.findAnimalsWithATail = function (cb) { 
 
    Animal.find({ hasTail: true }, cb); 
 
};

下面是用的方法和靜例如使用完整的模型:

var AnimalSchema = mongoose.Schema({ 
 
    name: String, 
 
    type: String, 
 
    hasTail: Boolean 
 
}); 
 

 
AnimalSchema.methods.findByType = function (cb) { 
 
    return this.model('Animal').find({ type: this.type }, cb); 
 
}; 
 

 
AnimalSchema.statics.findAnimalsWithATail = function (cb) { 
 
    Animal.find({ hasTail: true }, cb); 
 
}; 
 

 
module.exports = mongoose.model('Animal', AnimalSchema); 
 

 
// example usage: 
 

 
var dog = new Animal({ 
 
    name: 'Snoopy', 
 
    type: 'dog', 
 
    hasTail: true 
 
}); 
 

 
dog.findByType(function (err, dogs) { 
 
    console.log(dogs); 
 
}); 
 

 
Animal.findAnimalsWithATail(function (animals) { 
 
    console.log(animals); 
 
});