mongo mongoose populate子文档返回null

时间:2014-09-25 12:13:17

标签: mongodb mongoose mongoose-populate

我正在尝试使用node& mongoose的填充方法可以加入'查询2个集合。以下是我的架构设置:

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var ShopSchema = new Schema({
  ssss: { type: Schema.Types.ObjectId, required :true, ref: 'Stat' },
  ratings: [RatingSchema]
});

var RatingSchema = new Schema({
  stat: { type: Schema.Types.ObjectId, required :true, ref: 'Stat' }
}, {_id: false});

此外,我已经设置了Stat mongoose模型,以便查询正常工作(但结果不是我所期望的)。

我尝试执行以下查询:

ShopSchema.statics.load = function(id, cb) {
  this.findOne({
    _id: id
  }).populate('ssss', '_id stat_id').exec(cb);
};
mongoose.model('Shop', ShopSchema);

这给了我正确的结果,并且正确引用了sss。 结果是这样的。

"ssss":{"_id":"5406839ad5c5d9c5d47091f0","stat_id":1}

但是,以下查询给出了错误的结果。

ShopSchema.statics.load = function(id, cb) {
  this.findOne({
    _id: id
  }).populate('ratings.stat', '_id stat_id').exec(cb);
};
mongoose.model('Shop', ShopSchema);

这给了我所有结果的ratings.stat = null。有人能告诉我我做错了什么吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我刚通过反复试验找到答案..... 在最后一个示例中,ShopSchema在RatingSchema之前声明。所以我猜Mongoose并不确切知道RatingSchema中发生了什么,并使填充返回错误。因此,如果您在ShopSchema之前声明RatingSchema并且populate方法就像魅力一样......