我有一个结构,需要在子文档数组中添加或减去特定值,但是当我使用$set
时,如果我没有为它们显式设置值,则所有其他属性都将被删除。如何查询所需的子文档并编辑属性值,而其他对象和属性保持不变?
例子
{
title: 'james',
subby:[{id:1323313,total:10,name:'test'},
{id:2222222,total:10,name:'test2'}
]
}
在此示例中,我想从名称为“ test”的子文档总数中减去1
答案 0 :(得分:1)
您可以使用positional operator用name: test
查找一个数组元素,然后使用$inc减去1
。试试:
db.col.update({ title: "james", "subby.name": "test" }, { $inc: { "subby.$.total": -1 } })
您还可以使用all positional运算符来修改所有子文档(MongoDB 3.6 +):
db.col.update({ title: "james"}, { $inc: { "subby.$[].total": -1 } })
和filtered positional operator来修改选定的子文档(MongoDB 3.6 +):
db.col.update({ title: "james" }, { $inc: { "subby.$[cond1].total": -1, "subby.$[cond2].total": -1 } }, { arrayFilters: [ { "cond1.name": "test" }, { "cond2.name": "test2" } ] })