Gibt es eine einfache Möglichkeit, die ID (ObjectID) des zuletzt eingefügten Dokuments einer MongoDB-Instanz mithilfe des Java-Treibers abzurufen?
104
Ich habe gerade festgestellt, dass Sie dies tun können:
BasicDBObject doc = new BasicDBObject( "name", "Matt" );
collection.insert( doc );
ObjectId id = (ObjectId)doc.get( "_id" );
Um ein Casting von Object
bis ObjectId
mit a com.mongodb.client.MongoCollection collection
und a zu vermeiden org.bson.Document doc
, können Sie Folgendes tun:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
Es ist sicher zu tun
Wenn Sie sich den Treibercode ansehen
quelle
it's save to do
oderit's safe to do
?Ich kenne den Java-Treiber nicht, aber für die Nachwelt kann der Befehl getLastError ausgeführt werden, um die _id eines Schreibvorgangs abzurufen, sogar eines Upsert (ab 1.5.4).
quelle
Nachdem ein Dokument in die MongoDB-Sammlung eingefügt wurde, sollte das erfolgreiche Einfügen die erforderlichen Felder (nämlich _id) aktualisieren. Sie können das eingefügte Objekt nach der _id abfragen.
quelle
In MongoTemplate.class gibt es eine Methode
und die Methode wird ID für uns setzen
Wenn die Entität eine Unterklasse von BasicDBObject ist, wird eine ID für uns festgelegt.
quelle
Ich denke, die Antwort darauf lautet "Nein".
Was Sie tun können, ist, sich
_id
selbst manuell zur Verfügung zu stellen oder denCollectibleCodec
Mechanismus zu implementieren (was genau dasBasicBDDocument
ist). Bei all diesen Lösungen wird jedoch die ID clientseitig generiert._id
Trotzdem glaube ich nicht, dass es ein Problem gibt, die Client-Seite zu generieren.quelle
Dies ist eine Einfügeoperation:
Nach dem Einfügen erhalten Sie die zuletzt eingefügte ID:
Nachdem Sie den Wert erhalten haben, konvertieren Sie ihn in inter type.
quelle