2012-10-10 169 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