Récupère l’ID du dernier document inséré dans un mongoDB avec un pilote Java

Existe-t-il un moyen simple d’obtenir l’ID (ObjectID) du dernier document inséré d’une instance mongoDB à l’aide du pilote Java?

Hate de répondre à ma propre question, mais je viens de réaliser que vous pouvez faire ceci:

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

C’est sûr de faire

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

si vous regardez le code du pilote

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

Je ne connais pas le pilote Java, mais pour la postérité, la commande getLastError peut être exécutée pour obtenir l’id d’une écriture, même un upert (à partir de 1.5.4)

Pour éviter de com.mongodb.client.MongoCollection collection Object en ObjectId une com.mongodb.client.MongoCollection collection et d’un org.bson.Document doc , vous pouvez effectuer les opérations suivantes:

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

Une fois qu’un document est inséré dans la collection MongoDB, l’insertion réussie doit mettre à jour les champs obligatoires (viz. _Id). Vous pouvez interroger l’object inséré pour le _id.

Dans MongoTemplate.class a une méthode

 protected  void doInsert(Ssortingng collectionName, T objectToSave, MongoWriter writer) { assertUpdateableIdIfNotSet(objectToSave); initializeVersionProperty(objectToSave); maybeEmitEvent(new BeforeConvertEvent(objectToSave, collectionName)); DBObject dbDoc = toDbObject(objectToSave, writer); maybeEmitEvent(new BeforeSaveEvent(objectToSave, dbDoc, collectionName)); Object id = insertDBObject(collectionName, dbDoc, objectToSave.getClass()); populateIdIfNecessary(objectToSave, id); maybeEmitEvent(new AfterSaveEvent(objectToSave, dbDoc, collectionName)); } 

et la méthode va nous définir

 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); } 

nous pouvons voir si l’entité est une sous-classe de BasicDBObject, elle définira un identifiant pour nous.

Ceci est une opération d’insertion:

 DBCollection table1 = db.getCollection("Collection name"); BasicDBObject document = new BasicDBObject(); document.put("_id",value); document.put("Name", name); table1.insert(document); 

Après avoir inséré le dernier identifiant inséré:

 DBCollection tableDetails = db.getCollection("collection name"); BasicDBObject queryDetails = new BasicDBObject(); queryDetails.put("_id", value); DBCursor cursorDetails =tableDetails.find(queryDetails); DBObject oneDetails; oneDetails=cursorDetails.next(); Ssortingng data=oneDetails.get("_id").toSsortingng(); System.out.println(data); 

après avoir obtenu une valeur convertie en inter type.