Czy istnieje łatwy sposób na uzyskanie identyfikatora (ObjectID) ostatnio wstawionego dokumentu instancji mongoDB przy użyciu sterownika Java?
104
Właśnie zdałem sobie sprawę, że możesz to zrobić:
BasicDBObject doc = new BasicDBObject( "name", "Matt" );
collection.insert( doc );
ObjectId id = (ObjectId)doc.get( "_id" );
Aby uniknąć rzutowania z Object
do ObjectId
, biorąc pod uwagę a com.mongodb.client.MongoCollection collection
i a org.bson.Document doc
, możesz wykonać następujące czynności:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
To bezpieczne
jeśli spojrzysz na kod sterownika
źródło
it's save to do
czyit's safe to do
?Nie wiem o sterowniku Java, ale dla potomności można uruchomić polecenie getLastError, aby uzyskać _id zapisu, a nawet upsert (od 1.5.4)
źródło
Po wstawieniu dokumentu do kolekcji MongoDB, pomyślne wstawienie powinno zaktualizować wymagane pola (tj. _Id). Możesz zapytać wstawiony obiekt o identyfikator _id.
źródło
W MongoTemplate.class ma metodę
a metoda ustawi dla nas id
możemy zobaczyć, czy jednostka jest podklasą BasicDBObject, ustawi dla nas identyfikator.
źródło
Myślę, że odpowiedź na to pytanie brzmi „nie”.
To, co możesz zrobić, to dostarczyć
_id
samodzielnie, ręcznie lub zaimplementowaćCollectibleCodec
mechanizm (co dokładnieBasicBDDocument
robi). Jednak wszystkie te rozwiązania obejmują generowanie ID po stronie klienta.Powiedziawszy to, nie sądzę, że jest jakiś problem z generowaniem strony
_id
klienta.źródło
To jest operacja wstawiania:
Po wstawieniu otrzymujesz ostatnio wstawiony identyfikator:
po uzyskaniu wartości zamień na typ inter.
źródło