métodos se utilizan para interactuar con la instancia actual del modelo. Ejemplo:
var AnimalSchema = new Schema({
name: String
, type: String
});
// we want to use this on an instance of Animal
AnimalSchema.methods.findSimilarType = function findSimilarType (cb) {
return this.find({ type: this.type }, cb);
};
var Animal = mongoose.model('Animal', AnimalSchema);
var dog = new Animal({ name: 'Rover', type: 'dog' });
// dog is an instance of Animal
dog.findSimilarType(function (err, dogs) {
if (err) return ...
dogs.forEach(..);
})
Estática se utilizan cuando no se desea interactuar con una instancia, pero hace cosas relacionadas con modelo (por ejemplo, búsqueda de todos los animales llamados 'Rover').
Si desea insertar/actualizar una instancia de un modelo (en la base de datos), entonces methods
es el camino a seguir. Si solo necesita guardar/actualizar cosas, puede usar la función save
(ya existente en Mongoose). Ejemplo:
var Animal = mongoose.model('Animal', AnimalSchema);
var dog = new Animal({ name: 'Rover', type: 'dog' });
dog.save(function(err) {
// we've saved the dog into the db here
if (err) throw err;
dog.name = "Spike";
dog.save(function(err) {
// we've updated the dog into the db here
if (err) throw err;
});
});
Pero, ¿cómo podía hacer 'dog.save()' desde dentro de un método? – Industrial
'this.save()', ya que 'this' se referiría a' perro' – alessioalex
@alessioalex - Observo que esto es similar al ejemplo en los documentos de mangosta, sin embargo, se vuelve a especificar el tipo: 'return this.model ('Animal ') .find ({type: this.type}, cb); 'Nunca he entendido por qué tenemos que usar' model (' Animal ') 'aquí, ya que estamos agregando este método al esquema Animal. Presumiblemente es opcional entonces, ¿sabes por qué está escrito así en los documentos? – UpTheCreek