我有一个个人文档,里面有宠物清单:
{
"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”字段,保留其余部分。
答案 0 :(得分:0)
使用positional operator更新嵌套文档时,应为$set
指定整个路径,否则文档将被替换:
db.people.findAndModify({
query: { "personId": "kjadfh97r0", "pets.petId": "dfjkh32476" },
update: { $set: {"pets.$.kind": "tiger"} }
})