在findOneAndUpdate Mongoose 5.x之后从数组中检索特定记录

时间:2018-12-03 05:53:12

标签: javascript arrays node.js mongodb mongoose

假设我有一个如下文件:

{
  _id: '1'
  persons: [
    {
      userId: 'user1',
      changed: false
    },
    {
      userId: 'user2',
      changed: false
    },
  ]
}

我可以像下面这样简单地更新persons中的特定记录:

Model.findOneAndUpdate(
  {
    _id: '1',
    'persons.userId': 'user1'
  },
  {
    $set: { persons.$.changed: true }
  },
  { new: true }
)

但是返回的document将包含persons数组中的每个元素,有什么办法可以让我获得与条件'persons.userId': 'user1'匹配的特定数组元素?

1 个答案:

答案 0 :(得分:1)

您可以将projection用作findAndModify的参数之一,请尝试:

Model.findOneAndUpdate(
    {
        _id: "1",
        "persons.userId": "user1"
    },
    {
        $set: { "persons.$.changed": true }
    },
    { 
        new: true,
        projection: {
            persons: {
                $elemMatch: { userId: "user1" }
            }
        } 
    }
)