C'è un modo semplice per ottenere l'ID (ObjectID) dell'ultimo documento inserito di un'istanza mongoDB utilizzando il driver Java?Ottieni l'ID dell'ultimo documento inserito in un mongoDB con driver Java
risposta
odio rispondere alla mia domanda, ma ho appena realizzato si può fare questo:
BasicDBObject doc = new BasicDBObject("name", "Matt");
collection.insert(doc);
ObjectId id = (ObjectId)doc.get("_id");
Non so sul driver Java, ma per i posteri, il comando GetLastError può essere eseguito per ottenere il _id di a write, even an upsert (1.5.4)
Dopo che un documento è stato inserito nella raccolta MongoDB, l'inserimento riuscito dovrebbe aggiornare i campi richiesti (ad esempio _id). Puoi interrogare l'oggetto inserito per _id.
E 'sicuro di fare
doc.set("_id", new ObjectId())
se si guarda al codice del driver
if (ensureID && id == null){
id = ObjectId.get();
jo.put("_id" , id);
}
public static ObjectId get(){
return new ObjectId();
}
intendevi dire "è fatto salvo" o "è sicuro farlo"? – pd40
Per qualche ragione, in MongoDB 2.2.2 (a differenza di prima quando ero su 2.2.0) e con il driver Java 2.10.1, il codice nella risposta non funziona; dopo aver spostato l'oggetto nel documento, non riesco a ottenere il suo _id, anche se MongoDB emette automaticamente automaticamente ObjectId. Tuttavia, la tua soluzione di creare manualmente un ObjectId funziona e grazie per questa opzione! –
BasicDBObject doc = new BasicDBObject("_id", new ObjectId()); System.out.println("doc.id before: " + doc.get("_id")); new Mongo("localhost").getDB("test").getCollection("t").insert(doc); System.out.println("doc.id after: " + doc.get("_id"));
questo codice funziona bene per me, testato sulle nuove versioni mongo 2.2.2, driver 2.10.1 –
zlob
Si tratta di un'operazione di inserimento:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
Dopo inserto u ottenere ultimo inserito 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);
dopo aver ottenuto il valore convertito in tipo inter.
per evitare di proiettare Object
-ObjectId
, dato un com.mongodb.client.MongoCollection collection
e org.bson.Document doc
, è possibile effettuare le seguenti operazioni:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
In MongoTemplate.class ha un metodo
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));
}
e il metodo sarà id per noi
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);
}
possiamo vedere se l'entità è una sottoclasse di BasicDBObject, imposterà un id per noi.
- 1. Ottieni _id di un documento inserito in MongoDB?
- 2. Come eseguire l'upsert con mongodb-java-driver
- 3. mongodb java driver 3.0: come conservare il documento JSON
- 4. MongoDB C# Driver 2.0 - Aggiornamento documento
- 5. Aggiornamenti MongoDB con driver java versione 3.0
- 6. Ottieni il documento aggiornato in MongoDB
- 7. upsert Bulk con MongoDB Java 3.0 Driver
- 8. Java MongoDB Driver Connection Domanda
- 9. Aggiornamento MongoDB utilizzando il driver Java 3
- 10. Ottieni un documento in MongoDB senza specificare la raccolta
- 11. find_one MongoDB Ruby Driver
- 12. L'equivalente $ set di MongoDb nel suo driver java
- 13. Come aggiungere una matrice a un documento MongoDB usando Java?
- 14. Parse JSON in un documento MONGODB
- 15. Ottieni l'indice dell'oggetto inserito in un vettore
- 16. Java + MongoDB: aggiornamento di più campi in un documento
- 17. driver java mongodb - com.mongodb.MongoException: impossibile trovare un master
- 18. Come rimuovere un 'documento' con 'ID' usando il Driver Ufficiale C# per MongoDB?
- 19. Come convertire un BasicDBObject in un documento Mongo con il driver Java Mongo DB versione 3?
- 20. inserto in documento secondario con MongoDB
- 21. Trova documento secondario in array con mongodb
- 22. findOne NodeJS MongoDB driver
- 23. Come conosco le dimensioni del mio documento all'interno di MongoDB con il driver ruby
- 24. Ottieni l'ultimo ID inserito Sequenza
- 25. driver java mongodb come si rilevano le eccezioni?
- 26. Proiezione lato server con driver C# di MongoDB 2.0
- 27. MongoDB: il salvataggio di un documento riscrive l'intero documento?
- 28. Ottieni l'ID dell'ultimo record inserito in mybatis
- 29. FindAll in MongoDB .NET Driver 2.0
- 30. Rimuovere una voce dalla array usando driver di MongoDB-Java
rispondere alla tua domanda è [incoraggiata] (http://stackoverflow.com/help/self-answer), non ti preoccupare. –
Grazie per questo. Sai come fare lo stesso usando i dati di primavera mongodb? –