小编典典

如何更新MongoDB中特定文档的数组内特定嵌入文档的值?

java

我的文档中具有以下结构:

{
  _id : ObjectId("43jh4j343j4j"), 
  array : [
            { 
              _arrayId : ObjectId("dsd87dsa9d87s9d7"),
              someField : "something",
              someField2 : "something2"
            },
            { 
              _arrayId : ObjectId("sds9a0d9da0d9sa0"),
              someField : "somethingElse",
              someField2 : "somethingElse2"
            }
   ]
 }

我想更新 someFieldsomeField2, 但仅更新数组中的一项,与 _arrayId 匹配的
(例如_arrayId : ObjectId("dsd87dsa9d87s9d7");并且仅针对此文档(例如_id : ObjectId("43jh4j343j4j"))),而不更新其他项。

arrayIds 是不是唯一的,这就是为什么我需要它是针对特定文档的文档。$ positional operator如果要为数组中存在的每个文档更新该值,则可以使用,但这不是我想要的。

我试图在Java中完成此操作,但也可以使用命令行解决方案。


阅读 219

收藏
2020-09-24

共1个答案

小编典典

您仍然可以使用$ positional运算符来完成此操作。但是您需要指定父文档的objectid以及_arrayid过滤器。下面的命令行查询工作正常

db.so.update({_id:ObjectId("4e719eb07f1d878c5cf7333c"),
              "array._arrayId":ObjectId("dsd87dsa9d87s9d7")},
              {$set:{"array.$.someField":"updated"}})
2020-09-24