¿Existe una manera fácil de obtener el ID (ObjectID) del último documento insertado de una instancia mongoDB utilizando el controlador Java?Obtener el ID del último documento insertado en un controlador mongoDB con Java
Respuesta
odio a responder a mi propia pregunta, pero me he dado cuenta de que puede hacer esto:
BasicDBObject doc = new BasicDBObject("name", "Matt");
collection.insert(doc);
ObjectId id = (ObjectId)doc.get("_id");
No sé sobre el controlador de Java, pero para la posteridad, el comando getLastError se puede ejecutar para obtener _ID de una escritura, incluso una inserción (a partir de 1.5.4)
Después de insertar un documento en la colección MongoDB, la inserción correcta debería actualizar los campos obligatorios (a saber, _id). Puede consultar el objeto insertado para el _id.
Es seguro hacerlo
doc.set("_id", new ObjectId())
si nos fijamos en código del controlador
if (ensureID && id == null){
id = ObjectId.get();
jo.put("_id" , id);
}
public static ObjectId get(){
return new ObjectId();
}
¿quisiste decir 'es guardar para hacer' o' es seguro hacerlo'? – pd40
Por alguna razón, en MongoDB 2.2.2 (a diferencia de antes cuando estaba en 2.2.0) y con el controlador de Java 2.10.1, el código en la respuesta no funciona; después de que inserto el objeto en el documento, parece que no puedo obtener su _id, a pesar de que MongoDB simplemente genera automáticamente ObjectID. Sin embargo, su solución de crear manualmente un ObjectId funciona, ¡y gracias por esta opción! –
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"));
este código funciona bien para mí, probado en las nuevas versiones mongo 2.2.2, driver 2.10.1 –
zlob
Esta es una operación de inserción:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
Después de inserción u obtener la última inserta Identificación:
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);
después de obtener el valor convertir a inter tipo.
Para evitar la proyección de Object
-ObjectId
, dado un com.mongodb.client.MongoCollection collection
y una org.bson.Document doc
, puede hacer lo siguiente:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
En MongoTemplate.class tiene un método
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));
}
y el método se establecer id para nosotros
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);
}
podemos ver si la entidad es una subclase de BasicDBObject, nos establecerá una identificación.
- 1. MySQL y Java - Obtener ID del último valor insertado (JDBC)
- 2. Obtener ID del último registro insertado en Oracle db
- 3. vb.net sql último ID insertado
- 4. SqlAlchemy: obteniendo el id del último registro insertado
- 5. Obtener la identificación del último registro insertado en mybatis
- 6. Obtener el último valor insertado de MySQL con SQLAlchemy
- 7. C# + SQL Server ExecuteScalar() no devuelve el último ID insertado
- 8. último valor insertado en Yii
- 9. Cómo obtener el ID del artículo en un controlador onItemClick
- 10. ¿Cómo eliminar un 'documento' por 'ID' usando el controlador oficial C# para MongoDB?
- 11. Mongodb obtener una parte específica del documento
- 12. Obtener mongoStat a través del controlador mongoDB Java
- 13. Obteniendo la ID del registro recién insertado?
- 14. Identificar el último documento de MongoDB find() conjunto de resultados
- 15. mongodb: upserting: valor sólo se establece si el documento está siendo insertado
- 16. Golang/mgo: ¿Por qué mgo no devuelve la ID del documento insertado?
- 17. mongodb eliminar subdocumento del documento
- 18. Buscar un documento con ObjectID en mongoDB
- 19. ID únicos con mongodb
- 20. ¿Cómo obtener el último documento creado en couchdb?
- 21. ASP.NET MVC Obtener ID del último registro agregado
- 22. ¿Cómo se borra el documento en MongoDB?
- 23. Mantener el nombre de la propiedad Id en el documento incrustado con el controlador mongo C#
- 24. $ set equivalente de MongoDb en su controlador java
- 25. Java MongoDB obteniendo valor para el documento secundario
- 26. MongoDB: ¿Guardar un documento reescribe todo el documento?
- 27. PHP Postgres: Obtener último inserto ID
- 28. Límite mongodb en el documento incrustado
- 29. ¿Cómo utilizar Mongodb ObjectID como ID de documento?
- 30. Mejore el rendimiento en Mongodb usando el controlador java
respondiendo su propia pregunta es [estimulado] (http://stackoverflow.com/help/self-answer), no se preocupe. –
Gracias por esto. ¿Sabes cómo hacer lo mismo utilizando mongodb de datos de primavera? –