是否可以为特定模型的引用子文档自动运行populate()?
我有一个城市模型,它引用了我希望在提取城市/城市时自动填充的地区和国家/地区文档。
答案 0 :(得分:1)
嗯,在Mongoose网站上没有这方面的文件;我做的是这样的:
schema.statics.createQuery = function( populates ) {
var query = this.find();
populates.forEach(function( p ) {
query.populate( p );
});
return query;
};
当然,这种方法中有验证和其他一些东西,但基本上它是我对模型的处理方式。
在您的情况下,如果您在每次查找呼叫中都严格需要填充,您可以在这种方法中对填充进行硬编码。
答案 1 :(得分:0)
AFAIK没有办法自动填充开箱即用的所有对另一个模型的引用(虽然有插件)。以与@ 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 });
}
});