2012-10-10 288 views
13

只是一個簡單的查詢,例如在模型中使用雙引號。多個填充 - mongoosejs

模式/模式

var OrderSchema = new Schema({ 

    user: { 
     type : Schema.Types.ObjectId, 
     ref  : 'User', 
     required: true 
    }, 

    meal: { 
     type : Schema.Types.ObjectId, 
     ref  : 'Meal', 
     required: true 
    }, 
}); 

var OrderModel = db.model('Order', OrderSchema); 

查詢

OrderModel.find() 
    .populate('user') // works 
    .populate('meal') // dont works 
    .exec(function (err, results) { 
     // callback 
    }); 

我已經嘗試過類似

.populate('user meal') 
.populate(['user', 'meal']) 

其實只是填充的作品之一。

那麼,如何得到兩個填充工作?

回答

19

您已經在使用的正確語法:

OrderModel.find() 
    .populate('user') 
    .populate('meal') 
    .exec(function (err, results) { 
     // callback 
    }); 

也許從訂單meal的ObjectId不是Meals集合?

+0

感謝,換了別人,他們會做的同樣的:仍然確定你的身份證是存在的。 – mrzmyr

+0

@mrzmyr這裏有什麼問題?我遇到同樣的事情,但不知道它。 – Pei

15

如果你使用的貓鼬> = 3.6,你可以通過一個空間的路徑名的分隔字符串來填充:

OrderModel.find() 
    .populate('user meal') 
    .exec(function (err, results) { 
     // callback 
    }); 

http://mongoosejs.com/docs/populate.html

+0

確實簡潔,但在我看來,每個填充的路徑使其更具可讀性。 –

+0

這對我們非常有用,因爲我們可以傳遞一個數組並執行arr.join(''); – wayofthefuture