Come aggiornare il valore di specifici documenti incorporati, all’interno di un array, di un documento specifico in MongoDB?

Ho la seguente struttura nel mio documento:

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

Voglio aggiornare someField e someField2 ma solo per uno degli elementi nell’array, quello che corrisponde a _arrayId (ad esempio _arrayId : ObjectId("dsd87dsa9d87s9d7") e solo per questo documento (ad esempio _id : ObjectId("43jh4j343j4j") ) e nessun altro.

Gli arrayIds non sono unici per il documento, ecco perché ho bisogno che sia per un documento specifico. Potrei usare l’ $ positional operator se volessi aggiornare quel valore all’interno della matrice per ogni documento in cui esiste, ma non è quello che voglio.

Sto provando a realizzare questo in java ma una soluzione da riga di comando funzionerebbe pure.

    Puoi ancora usare $ positional operatore $ positional per realizzare questo. Ma è necessario specificare l’objectid del documento padre insieme al filtro _arrayid. La seguente query della riga di comando funziona correttamente

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

    Ecco la soluzione di RameshVel tradotta in java :

      DB db = conn.getDB( "yourDB" ); DBCollection coll = db.getCollection( "yourCollection" ); ObjectId _id = new ObjectId("4e71b07ff391f2b283be2f95"); ObjectId arrayId = new ObjectId("4e639a918dca838d4575979c"); BasicDBObject query = new BasicDBObject(); query.put("_id", _id); query.put("array._arrayId", arrayId); BasicDBObject data = new BasicDBObject(); data.put("array.$.someField", "updated"); BasicDBObject command = new BasicDBObject(); command.put("$set", data); coll.update(query, command);