Es gibt keinen Grund, im ersten Fall einen doppelten Indexfehler anzuzeigen, da nur versucht wird, die _id
zu aktualisieren und name
Felder desselben Datensatzes mit demselben Wert.
Wenn Sie es versuchen werden
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
Sie erhalten eine Fehlermeldung, da die Abfrage versucht, den Datensatz mit einer anderen _id
zu aktualisieren mit einer bestehenden _id
Wert.
Im zweiten Fall haben Sie zuerst einen Datensatz mit name
erstellt Feld und dann versuchen Sie, denselben Namen in einem anderen Datensatz zu aktualisieren, was zu einem Fehler als name
führt ist ein eindeutiger Index.
Bearbeiten :-
Wenn Sie es versuchen
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
gibt Ihnen den Fehler, da Sie in diesem Fall versuchen, einen Datensatz einzufügen, der bereits vorhanden ist, z. B. _id
ist eindeutig und Sie versuchen, einen weiteren Datensatz mit derselben _id
zu erstellen Wert.