Pregunta Métodos 'estáticos' de mangosta contra métodos 'instancia'


Creo que esta pregunta es similar a éste pero la terminología es diferente. De la Mangosta 4 documentación:

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 métodos estáticos cada una de las instancias animales tendría el findByName método disponible para él también. ¿Cuáles son los statics y methods objetos en un esquema? ¿Cuál es la diferencia y por qué debería usar una sobre la otra?


32
2018-04-16 02:49


origen


Respuestas:


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 del documento fido que hacer

fido.findSimilarTypes(function(err, dogs){
    // dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
});

44
2018-04-16 03:02