Czy istnieje prosty sposób uzyskania ID (ObjectID) ostatnio wstawionego dokumentu instancji mongoDB za pomocą sterownika Java?Uzyskaj identyfikator ostatnio wsuniętego dokumentu w mongoDB ze sterownikiem Java
Odpowiedz
Nienawiść odpowiedzieć na moje własne pytanie, ale zdałem sobie sprawę, można to zrobić:
BasicDBObject doc = new BasicDBObject("name", "Matt");
collection.insert(doc);
ObjectId id = (ObjectId)doc.get("_id");
nie wiem o kierowcy Java ale dla potomności, komenda GetlastError można uruchomić, aby uzyskać _id z zapis, nawet upsert (od 1.5.4)
Po włożeniu dokumentu do kolekcji MongoDB, pomyślne wstawienie powinno zaktualizować wymagane pola (tj. _id). Możesz zapytać wstawiony obiekt dla _id.
Jest to bezpieczne
doc.set("_id", new ObjectId())
jeśli spojrzeć na kod sterownika
if (ensureID && id == null){
id = ObjectId.get();
jo.put("_id" , id);
}
public static ObjectId get(){
return new ObjectId();
}
czy chcesz powiedzieć, że "można zapisać" lub "można to zrobić bezpiecznie"? – pd40
Z jakiegoś powodu w MongoDB 2.2.2 (w przeciwieństwie do wcześniejszych, gdy byłem na 2.2.0) i ze sterownikiem Java 2.10.1, kod w odpowiedzi nie działa; po tym jak wstawiłem obiekt do dokumentu, nie mogę uzyskać jego _id, mimo że MongoDB wyraźnie generuje automatycznie ObjectId. Jednak twoje rozwiązanie ręcznego tworzenia ObjectId działa, a dzięki za tę opcję! –
ten kod działa dobrze dla mnie, testowany na nowych wersjach mongo 2.2.2, sterownik 2.10.1 – zlob
Jest to wkładka operacja:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
Po wkładką u get ostatni wstawiony id:
DBCollection tableDetails = db.getCollection("collection name");
BasicDBObject queryDetails = new BasicDBObject();
queryDetails.put("_id", value);
DBCursor cursorDetails =tableDetails.find(queryDetails);
DBObject oneDetails;
oneDetails=cursorDetails.next();
String data=oneDetails.get("_id").toString();
System.out.println(data);
po uzyskaniu wartości przekonwertuj na typ inter.
Aby uniknąć odlew z Object
do ObjectId
, biorąc pod uwagę com.mongodb.client.MongoCollection collection
i org.bson.Document doc
, można wykonać następujące czynności:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
W MongoTemplate.class ma metodę
protected <T> void doInsert(String collectionName, T objectToSave, MongoWriter<T> writer) {
assertUpdateableIdIfNotSet(objectToSave);
initializeVersionProperty(objectToSave);
maybeEmitEvent(new BeforeConvertEvent<T>(objectToSave, collectionName));
DBObject dbDoc = toDbObject(objectToSave, writer);
maybeEmitEvent(new BeforeSaveEvent<T>(objectToSave, dbDoc, collectionName));
Object id = insertDBObject(collectionName, dbDoc, objectToSave.getClass());
populateIdIfNecessary(objectToSave, id);
maybeEmitEvent(new AfterSaveEvent<T>(objectToSave, dbDoc, collectionName));
}
i metoda ustaw dla nas identyfikator
protected void populateIdIfNecessary(Object savedObject, Object id) {
if (id == null) {
return;
}
if (savedObject instanceof BasicDBObject) {
DBObject dbObject = (DBObject) savedObject;
dbObject.put(ID_FIELD, id);
return;
}
MongoPersistentProperty idProp = getIdPropertyFor(savedObject.getClass());
if (idProp == null) {
return;
}
ConversionService conversionService = mongoConverter.getConversionService();
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(savedObject.getClass());
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(savedObject);
if (accessor.getProperty(idProp) != null) {
return;
}
new ConvertingPropertyAccessor(accessor, conversionService).setProperty(idProp, id);
}
możemy zobaczyć, czy obiekt jest podklasą BasicDBObject, ustawi dla nas identyfikator.
- 1. Skąd znam rozmiar mojego dokumentu wewnątrz MongoDB ze sterownikiem ruby
- 2. Aktualizacje MongoDB ze sterownikiem java w wersji 3.0
- 3. Uzyskaj identyfikator ostatnio wstawionego rekordu w oracle db
- 4. Indeksy budynków w MongoDB ze sterownikiem .NET 2.0
- 5. Mongodb - dołącz lub wyklucz niektóre elementy ze sterownikiem C#
- 6. Java MongoDB otrzymuje wartość dla sub dokumentu
- 7. Widok Modal ze sterownikiem nawigacyjnym
- 8. angularjs - Pierwsze stałe ze sterownikiem
- 9. Uzyskaj zaktualizowany dokument w MongoDB
- 10. Aktualizacja sub-dokumentu w mongodb?
- 11. Jak uzyskać ostatnio wstawiony identyfikator za pomocą interfejsu API JS?
- 12. Ostatnio wstawiony identyfikator MS SQL Server
- 13. Pobierz ostatnio wstawiony identyfikator z Mysql
- 14. pobierz ostatnio wstawiony identyfikator z wordpress $ wpdb
- 15. Uzyskaj najnowszy wstawiony identyfikator w wyzwalaczu?
- 16. angularjs rozwiązać ze sterownikiem jako ciąg
- 17. Selenium sendkeys zrzuca postać ze sterownikiem Chrome
- 18. mongoexport ostatnio godziny dane z mongodb
- 19. Uzyskaj identyfikator VK z dowolnego znaku w języku Java
- 20. Uzyskaj identyfikator sesji w ASP.Net
- 21. Uzyskaj identyfikator ostatniego wstawionego rekordu w mybatis
- 22. Sortuj według $ natural w MongoDB z oficjalnym sterownikiem C#
- 23. Jak dodać tablicę do dokumentu MongoDB za pomocą Java?
- 24. Uzyskaj identyfikator formularza?
- 25. Dostęp do danych ze sterownikiem w widoku w didInsertElement
- 26. Elasticsearch, uzyskaj średnią długość dokumentu
- 27. Jak usunąć pole całkowicie z dokumentu MongoDB?
- 28. Pobrać _id wstawionego dokumentu w MongoDB?
- 29. Znajdź największy rozmiar dokumentu w MongoDB
- 30. Pobierz ostatnio wstawiony identyfikator automatycznej inkrementacji w mysql
odpowiadając na własne pytanie jest [zachęcane] (http://stackoverflow.com/help/self-answer), nie martw się o to. –
Dzięki za to. Czy wiesz, jak to zrobić, używając wiosennych danych mongodb? –