2016-09-26 34 views

Odpowiedz

21

Logika bazy danych powinna być hermetyzowana wewnątrz modelu danych. Mongoose zapewnia 2 sposoby robienia tego, metody i statykę. Metody dodaje metodę instancji do dokumentów, natomiast Statyka dodaje statyczne metody "klasy" do samych modeli.

Biorąc przykład Animal modelu poniżej:

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

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

Moglibyśmy dodać metodę, aby znaleźć podobne rodzaje zwierząt oraz metodę statyczną, aby znaleźć wszystkie zwierzęta z ogonami:

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

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

Oto pełny model Przykład użycia dla metod i statyki:

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); 
 
});

Powiązane problemy