我有一个像这样的JSON结构:
// Users Collection
[{
"id": "1",
"email": "user1@mail.com",
"contacts": [
{
"user": "2", // reference
"nickname": "blub"
},
{
"user": "3", // reference
"nickname": "blub"
},
],
"otherfield": "anything"
}]
User
对象包含一个数组contacts
,它基本上代表一个引用的Users
列表。为了允许每个用户存储其他数据(如nickname
),我有一个对象数组而不是ObjectIds数组。
现在,我希望填充联系人,并指定要解析的字段(例如,ID和电子邮件)。所以预期的输出是这样的:
{
"id": "1",
"email": "user1@mail.com",
"contacts": [
{
"user": {
"id": "2",
"email": "user2@mail.com",
// without other fields
},
"nickname": "blub"
}
],
"otherfield": "anything"
}
我尝试过这样的事情
User.findById(id)
.populate('contacts.user')
.select('contacts.user.email')
但是我的contacts数组只包含空对象。
如果我试试这个:
User.findById(id).populate({
path: 'contacts.user',
select: 'email'
})
结果只是没有任何人口的父用户:
{
email: "user1@mail.com",
id: "1"
}
答案 0 :(得分:3)
答案 1 :(得分:0)
最后我在documentation找到了我忽略的内容(谢谢@Mikey)
Story.
findOne({ title: /casino royale/i }).
populate('author', 'name'). // only return the Persons name
exec(function (err, story) {
if (err) return handleError(err);
console.log('The author is %s', story.author.name);
// prints "The author is Ian Fleming"
console.log('The authors age is %s', story.author.age);
// prints "The authors age is null'
})