2014-09-25 103 views
1

我试图使用节点& mongoose的填充方法在查询上的'连接'2集合。以下是我的架构设置:mongo mongoose填充子文档返回null

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

而且我已经安装了统计猫鼬模式,使查询工作没有错误(但结果不是我所期望的)。

我试图执行以下查询:

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

这给了我正确的结果和SSSS被正确引用。 结果是这样的。

"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

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