2016-09-26 2 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); 
 
});

Смежные вопросы