7 ответов:
ненавижу отвечать на мой собственный вопрос, но я только что понял, что вы можете сделать это:
BasicDBObject doc = new BasicDBObject( "name", "Matt" ); collection.insert( doc ); ObjectId id = (ObjectId)doc.get( "_id" );
будет
doc.set("_id", new ObjectId())Если вы посмотрите на драйвер код
if ( ensureID && id == null ){ id = ObjectId.get(); jo.put( "_id" , id ); } public static ObjectId get(){ return new ObjectId(); }
Я не знаю о драйвере Java, но для потомков команда getLastError может быть запущена, чтобы получить _id записи, даже upsert (начиная с 1.5.4)
чтобы избежать литья из
ObjecttoObjectId, предоставленаcom.mongodb.client.MongoCollection collectionиorg.bson.Document doc, вы можете сделать следующее:collection.insert(doc); ObjectId id = doc.getObjectId("_id");
после того, как документ вставлен в коллекцию MongoDB, успешная вставка должна обновить необходимые поля (т. е. _идентификатор.) Вы можете запросить вставленный объект для поля _id.
В MongoTemplate.класс имеет метод
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)); }и метод установит id для нас
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); }мы можем увидеть, является ли сущность подклассом BasicDBObject, он установит для нас идентификатор.
это операция вставки:
DBCollection table1 = db.getCollection("Collection name"); BasicDBObject document = new BasicDBObject(); document.put("_id",value); document.put("Name", name); table1.insert(document);после вставки U получить последний вставленный идентификатор:
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);после получения значения преобразовать в тип.
Comments