What is the use of mongoose methods and statics?

坚强是说给别人听的谎言 提交于 2021-02-05 13:10:04

问题


What is the use of mongoose methods and statics and how are they different from normal functions?

Can anyone explain the difference with example.


回答1:


Database logic should be encapsulated within the data model. Mongoose provides 2 ways of doing this, methods and statics. Methods adds an instance method to documents whereas Statics adds static "class" methods to the Models itself.

Given the example Animal Model below:

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

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

We could add a method to find similar types of animal, and a static method to find all animals with tails:

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

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

Here's the full model with example usage for methods and statics:

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);
});



回答2:


If i wanted to retrieve animals with hasTail i could simply change this line of code:

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

to:

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

and i would not have to create a statics function.

Use method on individual documents if you want to manipulate the individual document like adding tokens etc. Use the statics approach if you want query the whole collection.



来源:https://stackoverflow.com/questions/39708841/what-is-the-use-of-mongoose-methods-and-statics

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!