我的文档中具有以下结构:
{ _id : ObjectId("43jh4j343j4j"), array : [ { _arrayId : ObjectId("dsd87dsa9d87s9d7"), someField : "something", someField2 : "something2" }, { _arrayId : ObjectId("sds9a0d9da0d9sa0"), someField : "somethingElse", someField2 : "somethingElse2" } ] }
我想更新 someField 和 someField2, 但仅更新数组中的一项,与 _arrayId 匹配的 项 (例如_arrayId : ObjectId("dsd87dsa9d87s9d7");并且仅针对此文档(例如_id : ObjectId("43jh4j343j4j"))),而不更新其他项。
_arrayId : ObjectId("dsd87dsa9d87s9d7")
_id : ObjectId("43jh4j343j4j")
该 arrayIds 是不是唯一的,这就是为什么我需要它是针对特定文档的文档。$ positional operator如果要为数组中存在的每个文档更新该值,则可以使用,但这不是我想要的。
$ positional operator
我试图在Java中完成此操作,但也可以使用命令行解决方案。
您仍然可以使用$ positional运算符来完成此操作。但是您需要指定父文档的objectid以及_arrayid过滤器。下面的命令行查询工作正常
$ positional
db.so.update({_id:ObjectId("4e719eb07f1d878c5cf7333c"), "array._arrayId":ObjectId("dsd87dsa9d87s9d7")}, {$set:{"array.$.someField":"updated"}})