如何更新数组的部分文档

时间:2018-07-16 15:45:04

标签: mongodb

我有一个个人文档,里面有宠物清单:

{
  "personId": "kjadfh97r0",
  "pets": [
    {
      "petId": "dfjkh32476",
      "name": "kitty",
      "kind": "cat"
    },
    {
      "petId": "askdjfh2794857",
      "name": "rexy",
      "kind": "dog"
    }
  ]
}

我想在某人内部找到一支笔,并只更新某些字段,所以我做了类似的事情:

db.people.findAndModify({
    query: { "personId": "kjadfh97r0", "pets.petId": "dfjkh32476" },
    update: {"$set":{"pets.$":{"kind":"tiger"}}}
})

但是发生在我身上的是整个文档都被"kind":"tiger"替换了,我只想更新“ kind”字段,保留其余部分。

1 个答案:

答案 0 :(得分:0)

使用positional operator更新嵌套文档时,应为$set指定整个路径,否则文档将被替换:

db.people.findAndModify({
   query: { "personId": "kjadfh97r0", "pets.petId": "dfjkh32476" },
   update: { $set: {"pets.$.kind": "tiger"} }
})