Mongoose +在子文档中填充一个属性

随着mongoose,我想在我的主文档的子文档中填充一个属性。 这是我的模特:

var device = { deviceId: {type: String, required: true}, number: {type: Number, default: 0} }; var notification = new Schema({ createdAt: {type: Date, default: Date.now}, device: {type: Schema.ObjectId, ref: 'Device'} }); var clientSchema = new Schema({ [...] information: { code: {type: String, required: true}, name: {type: String, required: true} }, notifications: [notification], [...] }); 

我试图做的是收到设备填充通知。

我试过这个:

  clientModel.findOne({"information.code": id}) .populate('notifications') .populate('notifications.device') .exec(function(err, client) { if (err) { console.log(err); next(err, null); } if (client) { console.log(client.notifications); next(null, client.notifications); } }); 

我得到了这个

 [{ device: 55634975d20f1f3903ff4325, _id: 5564b1139ac484db0251b4a2, createdAt: Tue May 26 2015 19:44:51 GMT+0200 (CEST) }] 

任何人都可以告诉我我做错了吗? 感谢您的帮助球员:)

在你的clientSchema通知是一个embedded,所以你不需要填充它。 尝试删除查询中的填充(“通知”)。 你应该只需要填充('notifications.device')。

正确的填充方式是:

 clientModel.findOne({"information.code": id}) .populate('notifications.device') .exec(function(err, client) { if (err) { console.log(err); next(err, null); } if (client) { console.log(client.notifications); next(null, client.notifications); } }); 

请注意,使用.populate('notifications')是不必要的,因为通知 不会被 引用而是embedded 。 这条线可能会导致问题。