是否可以为特定模型的引用子文档自动运行 populate() ?
我有一个城市模型,它引用了我希望在获取城市/城市时自动填充的地区和国家文档。
是否可以为特定模型的引用子文档自动运行 populate() ?
我有一个城市模型,它引用了我希望在获取城市/城市时自动填充的地区和国家文档。
好吧,Mongoose 网站上没有这方面的文档。我所做的是这样的:
schema.statics.createQuery = function( populates ) {
var query = this.find();
populates.forEach(function( p ) {
query.populate( p );
});
return query;
};
当然,这种方法有验证和其他一些东西,但本质上这是我对模型所做的。
在您的情况下,如果您在每个 find 调用中都严格需要它们,您可以用这种方法对填充进行硬编码。
AFAIK 无法自动填充对其他模型的所有引用(尽管有插件)。以与@gustavohenke 的答案类似的方式,您可以使用静态,并对您的查找查询进行少量更改。
这是我要做的:
citySchema.statics.fieldsToPopulate = function() {
return ['regionField', 'countryField'];
};
WhereregionField
和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 });
}
});