web-dev-qa-db-fra.com

A quoi servent les méthodes et la statique de la mangouste?

A quoi servent les méthodes et la statique de la mangouste et en quoi sont-elles différentes des fonctions normales?

Quelqu'un peut-il expliquer la différence avec l'exemple.

18
iiR

La logique de la base de données doit être encapsulée dans le modèle de données. Mongoose fournit 2 façons de procéder, méthodes et statique. Méthodes ajoute une méthode d'instance aux documents, tandis que Statique ajoute des méthodes statiques "de classe" aux modèles.

Étant donné l'exemple Animal Modèle ci-dessous:

var AnimalSchema = mongoose.Schema({
  name: String,
  type: String,
  hasTail: Boolean
});

module.exports = mongoose.model('Animal', AnimalSchema);

Nous pourrions ajouter une méthode pour trouver des types d’animaux similaires et une méthode statique pour trouver tous les animaux avec une queue:

AnimalSchema.methods.findByType = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
};

AnimalSchema.statics.findAnimalsWithATail = function (cb) {
  Animal.find({ hasTail: true }, cb);
};

Voici le modèle complet avec un exemple d'utilisation pour les méthodes et la statique:

var AnimalSchema = mongoose.Schema({
  name: String,
  type: String,
  hasTail: Boolean
});

AnimalSchema.methods.findByType = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
};

AnimalSchema.statics.findAnimalsWithATail = function (cb) {
  Animal.find({ hasTail: true }, cb);
};

module.exports = mongoose.model('Animal', AnimalSchema);

// example usage:

var dog = new Animal({
  name: 'Snoopy',
  type: 'dog',
  hasTail: true
});

dog.findByType(function (err, dogs) {
  console.log(dogs);
});

Animal.findAnimalsWithATail(function (animals) {
  console.log(animals);
});

32
Sha Alibhai

Si je voulais récupérer des animaux avec hasTail je pourrais simplement changer cette ligne de code:

return this.model('Animal').find({ type: this.type }, cb);

à:

return this.model('Animal').find({ hasTail: true }, cb);

et je n'aurais pas à créer une fonction statique.

Utilisez la méthode sur des documents individuels si vous souhaitez manipuler un document individuel, par exemple en ajoutant des jetons, etc. ..__ Utilisez l'approche statique si vous souhaitez interroger l'ensemble de la collection.

0
Hamid Mian