ブール型のアクティブ化されたフィールドを持つユーザー スキーマがあります。を含むドキュメントのみを返すクエリが必要ですactivated: true
。そして、すべての find、findOne、または findById に条件を追加するよりも効率的で DRY な方法があることを願っています。
最も効果的なアプローチは何ですか?
ブール型のアクティブ化されたフィールドを持つユーザー スキーマがあります。を含むドキュメントのみを返すクエリが必要ですactivated: true
。そして、すべての find、findOne、または findById に条件を追加するよりも効率的で DRY な方法があることを願っています。
最も効果的なアプローチは何ですか?
これを行う方法はあるかもしれませんが、通常、この情報を常に非表示にすることはお勧めできません。
他の言語やデータベース システムでこれを実行しようとした経験から言えば、ある時点で、アクティブ化されていないアイテムをロードしたい、またはロードする必要があるでしょう。ただし、アクティブ化されたアイテムのみを常に返すと、必要なリストを取得できなくなります。
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){ ... });
ここでマングースを見たいと思うかもしれませんQuery middleware
クエリ ミドルウェアは、次のモデルおよびクエリ関数でサポートされています。
- カウント
- 探す
- 見つける
- ...
例えば:
User.pre('find', function() {
console.log(this instanceof mongoose.Query); // true
this.activated = true;
});