Wie aktualisiere ich ein Objekt in MongoDB teilweise, sodass das neue Objekt mit dem vorhandenen Objekt überlagert / zusammengeführt wird?

Angesichts dieses Dokuments in MongoDB gespeichert

<code>{
   _id : ...,
   some_key: { 
        param1 : "val1",
        param2 : "val2",
        param3 : "val3"
   }
}
</code>

Ein Objekt mit neuen Informationen zuparam2 undparam3 von der Außenwelt muss gerettet werden

<code>var new_info = {
    param2 : "val2_new",
    param3 : "val3_new"
};
</code>

Ich möchte die neuen Felder über dem vorhandenen Zustand des Objekts zusammenführen / überlagern, damit param1 nicht entfernt wird

Dies tun

<code>db.collection.update(  { _id:...} , { $set: { some_key : new_info  } } 
</code>

Wird dazu führen, dass MongoDB genau das tut, was es verlangt hat, und some_key auf diesen Wert setzt. Ersetzen der alten.

<code>{
   _id : ...,
   some_key: { 
      param2 : "val2_new",
      param3 : "val3_new"
   }
}
</code>

Wie kann MongoDB nur neue Felder aktualisieren (ohne sie einzeln explizit anzugeben)? um dies zu bekommen:

<code>{
   _id : ...,
   some_key: { 
        param1 : "val1",
        param2 : "val2_new",
        param3 : "val3_new"
   }
}
</code>

Ich verwende den Java-Client, aber jedes Beispiel wird geschätzt

Antworten auf die Frage(13)

Ihre Antwort auf die Frage