在猫鼬中链接静态构造函数?就像 Rails 中的范围一样



有没有办法在猫鼬中链接静态构造函数?

在Rails中,这是链接named_scopes的方式

我有一个特殊的查询来从 mongo 检索一些数据,但有时我必须应用限制或对它们进行计数。

[更新] 此功能已被删除。

Mongoose 已命名范围功能,但有一个未解决的问题可能表明它们无法正常工作;检查该功能,看看它是否适合您。(当我有机会时,我也会这样做,因为这是一个非常好的功能!

以下示例代码取自 https://github.com/LearnBoost/mongoose/blob/master/test/namedscope.test.js 处的命名范围测试。

var UserNSSchema = new Schema({
    age: Number
  , gender: String
  , lastLogin: Date
});
UserNSSchema.namedScope('olderThan', function (age) {
  return this.where('age').gt(age);
});
UserNSSchema.namedScope('youngerThan', function (age) {
  return this.where('age').lt(age);
});
UserNSSchema.namedScope('twenties').olderThan(19).youngerThan(30);
UserNSSchema.namedScope('male').where('gender', 'male');
UserNSSchema.namedScope('female').where('gender', 'female');
UserNSSchema.namedScope('active', function () {
  return this.where('lastLogin').gte(+new Date - _24hours)
});
mongoose.model('UserNS', UserNSSchema);
UserNS.olderThan(20).find(function (err, found) { ... });
UserNS.olderThan(40).active.male.find(function (err, found) { ... });

只需扩展 Mongoose Query 对象,您就可以链接您的方法。这样

   獴。Query.prototype.customPopulate = function(populate) {    var 查询 = 这个;    var model = this.model;    if(填充 != 空)    {    返回查询.填充(填充);    } else{        返回查询;    }    }

这是一个老问题,但我创建了一个小插件来挠痒痒:

https://github.com/gberger/mongoose-named-scopes

https://www.npmjs.com/package/mongoose-named-scopes

UserSchema.scope('olderThan', function (age) {
  return this.where('age').gt(age);
});
UserSchema.scope('youngerThan', function (age) {
  return this.where('age').lt(age);
});
UserSchema.scope('twenties', function() {
  return this.olderThan(19).youngerThan(30);
});
UserSchema.scope('male', function() {
  return this.where('gender', 'male');
});

User.male().twenties().then(...)

相关内容

最新更新