使用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) }]
任何人都可以告诉我,我做错了吗? 谢谢你们的帮助:)
答案 0 :(得分:0)
在您的clientSchema通知中是嵌入式的,因此您无需填充它。尝试删除查询中的填充(“通知”)。你应该只需要填充('notifications.device')。
答案 1 :(得分:0)
填充的正确方法是:
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')的使用是不必要的,因为通知 不 引用但嵌入。这条线可能导致问题。