处理子文档

时间:2018-10-16 16:40:55

标签: mongodb mongoose

我有一个结构,需要在子文档数组中添加或减去特定值,但是当我使用$set时,如果我没有为它们显式设置值,则所有其他属性都将被删除。如何查询所需的子文档并编辑属性值,而其他对象和属性保持不变? 例子

{
   title: 'james',
   subby:[{id:1323313,total:10,name:'test'}, 
          {id:2222222,total:10,name:'test2'}
         ]
}

在此示例中,我想从名称为“ test”的子文档总数中减去1

1 个答案:

答案 0 :(得分:1)

您可以使用positional operatorname: 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" } ] })