在Mongoose文档提取上自动填充()

时间:2013-03-20 22:20:00

标签: javascript node.js mongodb mongoose

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

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

2 个答案:

答案 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'];
};

其中regionFieldcountryField是分别引用模型RegionCountry的字段。

然后在您的查询中,您可以相应地填充:

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 });
      }
    });