mongocollection ejemplos java mongodb

ejemplos - Obtenga la identificación del último documento insertado en un controlador mongoDB con Java



mongodb java find by id (7)

¿Hay una manera fácil de obtener el ID (ObjectID) del último documento insertado de una instancia de mongoDB utilizando el controlador de Java?


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.


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 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.


Es seguro hacer

doc.set("_id", new ObjectId())

si miras el código del conductor

if ( ensureID && id == null ){ id = ObjectId.get(); jo.put( "_id" , id ); } public static ObjectId get(){ return new ObjectId(); }


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 insertar, obtienes la última ID insertada:

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.


No sé sobre el controlador de Java, pero para la posteridad, el comando getLastError se puede ejecutar para obtener el _id de una escritura, incluso una inserción (a partir de 1.5.4)


Odio responder mi propia pregunta, pero me di cuenta de que puedes hacer esto:

BasicDBObject doc = new BasicDBObject( "name", "Matt" ); collection.insert( doc ); ObjectId id = (ObjectId)doc.get( "_id" );


Para evitar el com.mongodb.client.MongoCollection collection de Object a ObjectId , una com.mongodb.client.MongoCollection collection y un org.bson.Document doc , puede hacer lo siguiente:

collection.insert(doc); ObjectId id = doc.getObjectId("_id");