Mongodb-Upsert aktualisiert nur ausgewählte Felder, fügt jedoch alle ein

Ich versuche, upsert in MongoDB zu verwenden, um ein einzelnes Feld in einem Dokument zu aktualisieren, wenn es gefunden wird, ODER ein ganz neues Dokument mit vielen Feldern einzufügen. Das Problem ist, dass MongoDB meines Erachtens entweder jedes Feld ersetzt oder eine Teilmenge von Feldern in seine Upsert-Operation einfügt, d. H. Es kann nicht mehr Felder einfügen, als es tatsächlich aktualisieren möchte.

Was ich tun möchte, ist das Folgende:

Ich frage nach einem einzelnen eindeutigen WertWenn ein Dokument bereits vorhanden ist, wird nur ein Zeitstempelwert (nennen wir ihn "lastseen") auf einen neuen Wert aktualisiertWenn ein Dokument nicht existiert, füge ich es mit einer langen Liste verschiedener Schlüssel / Wert-Paare hinzu, die für den Rest ihrer Lebensdauer statisch bleiben sollen.

Veranschaulichen wir:

In diesem Beispiel wird nach meinem Verständnis das Datum der letzten Anzeige aktualisiert, wenn "Name" gefunden wird. Wenn jedoch "Name" nicht gefunden wird, wird nur "Name" + "letzte Anzeige" eingefügt.

db.somecollection.update({name: "some name"},{ $set: {"lastseen": "2012-12-28"}}, {upsert:true})

Wenn ich dem zweiten Argument weitere Felder (Schlüssel / Wert-Paare) hinzufüge und die $ -Einstellung lösche, wird jedes Feld beim Aktualisieren ersetzt, hat jedoch den gewünschten Effekt beim Einfügen. Gibt es etwas wie $ insert oder ähnliches, um Operationen nur beim Einfügen auszuführen?

Es scheint mir also, dass ich nur eines der Folgenden bekommen kann:

Das richtige Aktualisierungsverhalten, würde aber ein Dokument mit nur einer Teilmenge der gewünschten Felder einfügen, wenn das Dokument nicht vorhanden istDas korrekte Einfügeverhalten würde dann aber alle vorhandenen Felder überschreiben, wenn das Dokument bereits existiert

Ist mein Verständnis korrekt? Wenn ja, ist dies mit einer einzigen Operation zu lösen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage