Mongoose从填充数组中选择字段

时间:2017-08-27 17:35:59

标签: mongodb mongoose

我有一个像这样的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"
}

2 个答案:

答案 0 :(得分:3)

尝试

User.findById(id).populate({
    path: 'contacts.user',
    select: 'email'
})

查看documentation填充多个路径

答案 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'
  })