Ich möchte eine _id MongoDB eines Dokuments aktualisieren. Ich weiß, es ist keine wirklich gute Übung. Aber aus irgendeinem technischen Grund muss ich es aktualisieren. Aber wenn ich versuche, es zu aktualisieren Ich habe:Wie aktualisieren Sie die _id eines MongoDB-Dokuments?
> db.clients.update({'_id':ObjectId("4cc45467c55f4d2d2a000002")}, {'$set':{'_id':ObjectId("4c8a331bda76c559ef000004")}});
Mod on _id not allowed
Und das Update wird nicht gemacht. Wie kann ich es wirklich aktualisieren?
Ein lustiges Problem mit diesem erscheint, wenn ein Feld in diesem Dokument einen eindeutigen Index hat. In diesem Fall schlägt Ihr Beispiel fehl, weil ein Dokument nicht mit einem doppelten Wert in einem eindeutigen indizierten Feld eingefügt werden kann. Sie könnten dies beheben, indem Sie zuerst das Löschen durchführen, aber das ist eine schlechte Idee, denn wenn Ihr Einfügen aus irgendeinem Grund fehlschlägt, sind Ihre Daten jetzt verloren. Sie müssen stattdessen den Index löschen, die Arbeit ausführen und dann den Index wiederherstellen. – skelly
Guter Punkt @skelly! Ich habe zufällig über ähnliche Probleme nachgedacht und deinen frischen Kommentar erst vor 2 Stunden gesehen. Diese Änderung der ID-Problematik wird als ein intrinsisches Problem angesehen, das dadurch verursacht wird, dass der Benutzer die ID wählen kann? – RayLuo
Wenn Sie einen 'doppelten Schlüsselfehler' in der' insert'-Zeile bekommen und sich nicht um das von @skelly erwähnte Problem sorgen, ist die einfachste Lösung, zuerst die 'remove'-Zeile aufzurufen und dann die' insert'-Zeile aufzurufen. Das 'doc' sollte bereits auf Ihrem Bildschirm erscheinen, damit es sich leicht wiederherstellen lässt, im schlimmsten Fall, selbst wenn das Einfügen fehlschlägt, für einfache Dokumente. – philfreo