0

ブール型のアクティブ化されたフィールドを持つユーザー スキーマがあります。を含むドキュメントのみを返すクエリが必要ですactivated: true。そして、すべての find、findOne、または findById に条件を追加するよりも効率的で DRY な方法があることを願っています。

最も効果的なアプローチは何ですか?

4

2 に答える 2

1

これを行う方法はあるかもしれませんが、通常、この情報を常に非表示にすることはお勧めできません。

他の言語やデータベース システムでこれを実行しようとした経験から言えば、ある時点で、アクティブ化されていないアイテムをロードしたい、またはロードする必要があるでしょう。ただし、アクティブ化されたアイテムのみを常に返すと、必要なリストを取得できなくなります。

findActiveあなたの目的のために、スキーマにメソッドを作成することをお勧めします:


someSchema.static("findActive", function(query, cb){
  // check if there is a query and callback
  if (!cb){
    cb = query;
    query = {};
  }

  // set up an empty query, if there isn't one provided
  if (!query) { query = {}; }

  // make sure you only load activated items
  query.activated = true;

  // run the query
  this.find(query, cb);
});

このメソッドを使用するとfindActive、 と同じメソッドが得られますがfindOne、アクティブ化されたアイテムは常にフィルタリングされます。

MyModel.findActive(function(err, modelList){ ... });

オプションで、追加のクエリ フィルタをサポートします。

MyModel.findActive({some: "stuff"}, function(err, modelList){ ... });

于 2016-03-29T13:49:18.443 に答える
1

ここでマングースを見たいと思うかもしれませんQuery middleware

クエリ ミドルウェアは、次のモデルおよびクエリ関数でサポートされています。

  • カウント
  • 探す
  • 見つける
  • ...

例えば:

User.pre('find', function() {
  console.log(this instanceof mongoose.Query); // true
  this.activated = true;
});
于 2016-03-29T13:18:00.010 に答える