特定のモデルの参照サブドキュメントに対して populate() を自動的に実行することは可能ですか?
都市が取得されたときに自動的に入力されるようにしたい地域と国のドキュメントを参照する都市モデルがあります。
特定のモデルの参照サブドキュメントに対して populate() を自動的に実行することは可能ですか?
都市が取得されたときに自動的に入力されるようにしたい地域と国のドキュメントを参照する都市モデルがあります。
まあ、これに関するドキュメントは Mongoose の Web サイトにはありません。私がしていることは次のようなものです:
schema.statics.createQuery = function( populates ) {
var query = this.find();
populates.forEach(function( p ) {
query.populate( p );
});
return query;
};
もちろん、このメソッドには検証やその他の機能がありますが、基本的にはモデルに対して行うことです。
あなたの場合、すべての検索呼び出しでそれらが厳密に必要な場合は、そのようなメソッドで populates をハードコーディングできます。
私の知る限り、別のモデルへのすべての参照をすぐに自動入力する方法はありません (ただし、プラグインはあります)。@gustavohenkeの回答と同様に、検索クエリに小さな変更を加えて静的を使用できます。
これが私がすることです:
citySchema.statics.fieldsToPopulate = function() {
return ['regionField', 'countryField'];
};
regionField
とはそれぞれモデルとcountryField
を参照するフィールドです。Region
Country
次に、クエリでそれに応じて入力できます。
var populate = city.fieldsToPopulate ? city.fieldsToPopulate() : [];
city.findById(id)
.populate(populate)
.exec(function(err, data) {
if (err) {
return next(err);
} else {
res.render('template', { city: data });
}
});