3

是否可以为特定模型的引用子文档自动运行 populate() ?

我有一个城市模型,它引用了我希望在获取城市/城市时自动填充的地区和国家文档。

4

2 回答 2

1

好吧,Mongoose 网站上没有这方面的文档。我所做的是这样的:

schema.statics.createQuery = function( populates ) {
   var query = this.find();
   populates.forEach(function( p ) {
       query.populate( p );
   });

   return query;
};

当然,这种方法有验证和其他一些东西,但本质上这是我对模型所做的。

在您的情况下,如果您在每个 find 调用中都严格需要它们,您可以用这种方法对填充进行硬编码。

于 2013-03-20T22:29:50.200 回答
0

AFAIK 无法自动填充对其他模型的所有引用(尽管有插件)。以与@gustavohenke 的答案类似的方式,您可以使用静态,并对您的查找查询进行少量更改。

这是我要做的:

citySchema.statics.fieldsToPopulate = function() {
   return ['regionField', 'countryField'];
};

WhereregionFieldcountryField是分别引用模型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 });
      }
    });
于 2015-08-10T05:07:59.177 回答