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.