update node.js mongodb mongoose

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?