2014-09-25 88 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並且該填充方法像魅力一樣工作。