【发布时间】:2015-08-10 13:07:59
【问题描述】:
是否可以为特定模型的引用子文档自动运行 populate()?
我有一个引用了 Region 和 Country 文档的 City 模型,我希望在获取一个或多个城市时自动填充这些文档。
【问题讨论】:
标签: javascript node.js mongodb mongoose
是否可以为特定模型的引用子文档自动运行 populate()?
我有一个引用了 Region 和 Country 文档的 City 模型,我希望在获取一个或多个城市时自动填充这些文档。
【问题讨论】:
标签: javascript node.js mongodb mongoose
嗯,Mongoose 网站上没有这方面的文档;我所做的是这样的:
schema.statics.createQuery = function( populates ) {
var query = this.find();
populates.forEach(function( p ) {
query.populate( p );
});
return query;
};
当然,此方法中包含验证和其他一些内容,但本质上这是我对模型所做的。
在您的情况下,如果您在每次 find 调用中都严格需要它们,您可以用这种方法对填充进行硬编码。
【讨论】:
populate()。但请注意,这可能比您真正需要的要贵。
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 });
}
});
【讨论】: