metodi sono utilizzati per interagire con l'istanza corrente del modello. Esempio:
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(..);
})
Statica vengono utilizzate quando non si vuole interagire con un'istanza, ma fare cose del modello relative (per esempio ricerca di tutti gli animali di nome 'Rover').
Se si desidera inserire/aggiornare un'istanza di un modello (nel db), quindi methods
sono la strada da percorrere. Se hai solo bisogno di salvare/aggiornare roba puoi usare la funzione save
(già esistente in Mongoose). Esempio:
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;
});
});
Ma come avrei potuto fare 'dog.save()' all'interno di un metodo? – Industrial
'this.save()', poiché 'this' farebbe riferimento a' dog' – alessioalex
@alessioalex - Ho notato che questo è simile all'esempio nei documenti mongoose, tuttavia rispettano il tipo come: 'return this.model ('Animal ') .find ({type: this.type}, cb); 'Non ho mai capito perché dobbiamo usare' model (' Animal ') 'qui, dato che stiamo aggiungendo questo metodo allo schema Animal. Presumibilmente è opzionale quindi - sai perché è scritto così nei documenti? – UpTheCreek