Golang/mgo: Warum ist mgo nicht wieder die ID des eingefügten Dokuments?
Laut der Dokumentation (http://godoc.org/launchpad.net/mgo/v2) erhalten Sie die ID Ihres "Upserted" Dokument wenn Sie die Upsert-Methode.
Es gibt auch eine Insert-Methode, die nicht über diese Funktionalität.
Warum ist das so? Was ist, wenn ich möchte ein Insert statt ein Upsert? (oder wäre nicht immer ein Gültiger Grund, das zu wollen, das zu tun? Ich fange an zu Fragen.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie
bson
.NewObjectId()
generieren Sie eine ID eingefügt werden.Dies ist, wie würden Sie legen Sie ein neues Dokument:
Da Sie nicht wissen, wenn du gehst, um insert-oder update-wenn Sie ein Problem
Upsert
, wäre es überflüssig, generieren Sie eine ID nur legen Sie es direkt nach der Abfrage (bei einem update passiert). Das ist, warum es ist, generiert db-Seite und an Sie zurückgegeben, wenn anwendbar.i := bson.NewObjectId() c.Insert(bson.M{"_id": i}, yourStruct)
Sollte dies nicht geschehen, an alle, die mgo einfügen soll und die Rückgabe der Id, da, wenn wir erzeugten die ObjectId von der Anwendung selbst, Wenn die Anwendung neu gestartet wird, ist die Objekt-Id-generator wird von Anfang Erzeugung der gleichen IDs wieder und wieder, so aktualisieren Sie vorhandene Datensätze in der Datenbank.
Falsch ist, MGO sollte sich auf die Datenbank bei der Erzeugung dieser IDs und aktualisieren Sie das Objekt oder die Rücksendung der objectId des eingefügten Objekts sofort, wie was in anderen Sprachen verbindlich zu MongoDB hat wie in Python oder Java.
bson.NewObjectId()
würde man mitbson.NewObjectIdWithTime(time.Now())
dem Thema die Anwendung neu zu starten, wäre das kein problem, richtig?Kann man immer versuchen die Upsert-Funktion, um die generierte ID.
Dies ist ein Beispiel-code habe ich und funktioniert einwandfrei.....