Search code examples
javamongodbmongodb-java

How to update value of specific embedded document, inside an array, of a specific document in MongoDB?


I have the following structure in my document:

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

I want to update someField and someField2 but only for one of the items in the array, the one that matches _arrayId (e.g. _arrayId : ObjectId("dsd87dsa9d87s9d7"); and only for this document (e.g. _id : ObjectId("43jh4j343j4j") ) and no other.

The arrayIds are not unique to the document that's why I need it to be for a specific document. I could use the $ positional operator if I wanted to update that value within the array for every document it exists in, but that's not what I want.

I am trying to accomplish this in but a command line solution would work as well.


Solution

  • You could still use $ positional operator to accomplish this. But you need to specify the objectid of the parent doc along with the _arrayid filter. The below command line query works fine

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