Mongoose的方法和统计数据有什么区别?

时间:2014-05-02 09:53:15

标签: node.js mongoose

方法与静力学有什么区别?

Mongoose API将静态定义为

Statics are pretty much the same as methods but allow for defining functions that exist directly on your Model.

究竟是什么意思?直接在模型上存在什么意思?

文档中的静态代码

AnimalSchema.statics.search = function search (name, cb) {
  return this.where('name', new RegExp(name, 'i')).exec(cb);
}

Animal.search('Rover', function (err) {
  if (err) ...
})

2 个答案:

答案 0 :(得分:8)

好像是

'的方法'为从Models

构造的文档添加实例方法

,而

'的静态'添加静态"类"模型本身的方法

来自文档:

架构#方法(方法,[fn])

为从此模式编译的模型构建的文档添加实例方法。

var schema = kittySchema = new Schema(..);

schema.method('meow', function () {
  console.log('meeeeeoooooooooooow');
})

Schema#static(name,fn)

添加静态"类"从这个模式编译的模型的方法。

var schema = new Schema(..);
schema.static('findByName', function (name, callback) {
  return this.find({ name: name }, callback);
});

答案 1 :(得分:7)

static视为“覆盖”“现有”方法。所以直接来自可搜索的文档:

AnimalSchema.statics.search = function search (name, cb) {
   return this.where('name', new RegExp(name, 'i')).exec(cb);
}

Animal.search('Rover', function (err) {
  if (err) ...
})

这基本上在“全局”方法上设置了不同的签名,但仅在调用此特定模型时应用。

希望能更清楚地解决问题。