按 ID 查找和更新嵌套数组元素

Find and Update nested array element by ID

我有一个类似这样的用户模型

{
     _id:"something",
     email:"abc@gmail.com",
     contacts:[
     {_id:"123",status:"PENDING"},
     {_id:"456",status:"PENDING"},
     {_id:"789",status:"PENDING"}
     ]
}

并且我有一个用户联系人“123”的 ID,我想将该特定联系人的状态从“待定”更新为“成功”。我该怎么做?

最简单的方法是使用数组标识符 $,如下所示:

db.collection.updateOne({
  email: "abc@gmail.com",
  "contacts._id": "123"
},
{
  "$set": {
    "contacts.$.status": "SUCCESSFUL"
  }
})

Mongo Playground

数组标识符更新与查询匹配的数组的第一个元素。

db.collection.updateOne({ _id: "something" }, { contacts: [{ _id: "123", status: "SUCCESSFUL" }] }, function (err, res) {
    
})