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

Angesichts dieser gespeicherte Dokumente werden in MongoDB

{
   _id : ...,
   some_key: { 
        param1 : "val1",
        param2 : "val2",
        param3 : "val3"
   }
}

Ein Objekt mit neuen Informationen über param2 und param3 von der Außenwelt braucht, um gerettet zu werden

var new_info = {
    param2 : "val2_new",
    param3 : "val3_new"
};

Möchte ich verbinden /überlagern sich die neuen Felder in den vorhandenen Zustand des Objekts, so dass param1 nicht entfernt

Tun dies

db.collection.update(  { _id:...} , { $set: { some_key : new_info  } } 

Führen zu MongoDB ist dabei genau so, wie es gefragt wurde, und setzt some_key auf diesen Wert. ersetzen Sie die alte.

{
   _id : ...,
   some_key: { 
      param2 : "val2_new",
      param3 : "val3_new"
   }
}

Was ist der Weg, um MongoDB update nur neue Felder (ohne Angabe Sie eins nach dem anderen explizit)? um dies zu erhalten:

{
   _id : ...,
   some_key: { 
        param1 : "val1",
        param2 : "val2_new",
        param3 : "val3_new"
   }
}

Ich bin mit dem Java-client, aber jedes Beispiel, wird geschätzt

InformationsquelleAutor der Frage Eran Medan | 2012-04-24

Schreibe einen Kommentar