node.js - update - Métodos ''estáticos'' de mangosta contra métodos ''instancia''
mongoose virtual (1)
statics
son los métodos definidos en el Modelo. methods
se definen en el documento (instancia).
Usted puede hacer
Animal.findByName(''fido'', function(err, fido){
// fido => { name: ''fido'', type: ''dog'' }
});
Y luego puedes usar la instancia de documento fido
para hacer
fido.findSimilarTypes(function(err, dogs){
// dogs => [ {name:''fido'',type:''dog} , {name:''sheeba'',type:''dog''} ]
});
Creo que esta pregunta es similar a esta, pero la terminología es diferente. De la documentation Mongoose 4:
También podemos definir nuestros propios métodos personalizados de instancia de documento.
// define a schema
var animalSchema = new Schema({ name: String, type: String });
// assign a function to the "methods" object of our animalSchema
animalSchema.methods.findSimilarTypes = function (cb) {
return this.model(''Animal'').find({ type: this.type }, cb);
}
Ahora todas nuestras instancias de animales tienen disponible un método findSimilarTypes.
Y entonces:
Agregar métodos estáticos a un Modelo también es simple. Continuando con nuestro animalSchema:
// assign a function to the "statics" object of our animalSchema
animalSchema.statics.findByName = function (name, cb) {
return this.find({ name: new RegExp(name, ''i'') }, cb);
}
var Animal = mongoose.model(''Animal'', animalSchema);
Animal.findByName(''fido'', function (err, animals) {
console.log(animals);
});
Parece que con los métodos estáticos, cada una de las instancias animales tendría findByName
disponible el método findByName
. ¿Cuáles son los objetos statics
y de methods
en un esquema? ¿Cuál es la diferencia y por qué debería usar una sobre la otra?