0

マングースで静的コンストラクターをチェーンする方法はありますか?

Railsではnamed_scopesをチェーンする方法です

mongoからいくつかのデータを取得するための特別なクエリがありますが、制限を適用するか、それらをカウントする必要がある場合があります。

4

3 に答える 3

1

[更新]この機能は削除されました。

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) { ... });
于 2012-08-08T17:03:21.833 に答える
0

Mongoose Queryオブジェクトを拡張するだけで、メソッドをチェーンできるようになります。そのようです

    mongoose.Query.prototype.customPopulate = function(populate){
    var query = this;
    var model = this.model;

    if(populate!= null)
    {{
    query.populate(populate);を返します。
    } そうしないと{
        クエリを返します。
    }
    }

于 2014-04-09T00:25:54.927 に答える
0

これは古い質問ですが、私はこのかゆみを掻く小さなプラグインを作成しました。

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(...)
于 2016-06-21T20:46:24.873 に答える