【问题标题】:Manipulating subdocuments操作子文档
【发布时间】:2018-10-17 01:21:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: mongodb mongoose


    【解决方案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" } ] })
    

    【讨论】:

    • 感谢您,为我指明了正确的方向。处理子文档可能有点棘手。这适用于一系列项目吗?就像假设我想将两个子文档都增加不同的数量,这适用于这种情况吗?
    • @kabuto178 修改了我的答案
    • @mickl 这正是我想要的,感谢您的指导
    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多