[MONGODB] / 자바 드라이버와 MongoDB를 지난 삽입 된 문서의 ID를 가져옵니다
MONGODB/ 자바 드라이버와 MongoDB를 지난 삽입 된 문서의 ID를 가져옵니다
자바 드라이버를 사용하여 MongoDB를 인스턴스의 마지막 삽입 된 문서의 ID (OBJECTID)를 얻을 수있는 쉬운 방법이 있습니까?
해결법
-
==============================
1.난 그냥 당신이 할 수있는 실현 :
난 그냥 당신이 할 수있는 실현 :
BasicDBObject doc = new BasicDBObject( "name", "Matt" ); collection.insert( doc ); ObjectId id = (ObjectId)doc.get( "_id" );
-
==============================
2.그것은 할 안전
그것은 할 안전
doc.set("_id", new ObjectId())
당신은 드라이버 코드를 보면
if ( ensureID && id == null ){ id = ObjectId.get(); jo.put( "_id" , id ); } public static ObjectId get(){ return new ObjectId(); }
-
==============================
3.주어진 ObjectId가 반대에서 com.mongodb.client.MongoCollection 수집과 org.bson.Document의 문서를 캐스팅하지 않도록하려면 다음을 수행 할 수 있습니다 :
주어진 ObjectId가 반대에서 com.mongodb.client.MongoCollection 수집과 org.bson.Document의 문서를 캐스팅하지 않도록하려면 다음을 수행 할 수 있습니다 :
collection.insert(doc); ObjectId id = doc.getObjectId("_id");
-
==============================
4.(1.5.4 기준)에도 upsert을 나는 자바 드라이버에 대해 알고하지 않습니다하지만 후대를 들어,을 GetLastError 명령은 쓰기의 _id를 얻을 수 실행할 수 있습니다
(1.5.4 기준)에도 upsert을 나는 자바 드라이버에 대해 알고하지 않습니다하지만 후대를 들어,을 GetLastError 명령은 쓰기의 _id를 얻을 수 실행할 수 있습니다
-
==============================
5.문서가 MongoDB의 컬렉션에 삽입 한 후에, 성공적으로 삽입 필수 필드 (즉. _id)를 업데이트한다. 당신은 _id의 삽입 된 개체를 조회 할 수 있습니다.
문서가 MongoDB의 컬렉션에 삽입 한 후에, 성공적으로 삽입 필수 필드 (즉. _id)를 업데이트한다. 당신은 _id의 삽입 된 개체를 조회 할 수 있습니다.
-
==============================
6.MongoTemplate.class에서이 방법을 가지고
MongoTemplate.class에서이 방법을 가지고
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의 하위 클래스 인 경우, 그것은 우리를 위해 ID를 설정합니다 볼 수 있습니다.
-
==============================
7.나는이에 대한 답은 "아니오"라고 생각합니다.
나는이에 대한 답은 "아니오"라고 생각합니다.
당신이 할 수있는 일은 중 하나를 수동으로 자신을 _ID하여 제공하거나 (BasicBDDocument이 바로 이러한 작업을 수행하는 것 임) CollectibleCodec 메커니즘을 구현합니다. 그러나이 모든 솔루션은 ID의 클라이언트 측을 생성하는 것을 포함한다.
그런 말을하는 데, 나는 _id 클라이언트 측 생성에 문제가 있다고 생각하지 않습니다.
-
==============================
8.이 동작을 삽입 할 수 있습니다 :
이 동작을 삽입 할 수 있습니다 :
DBCollection table1 = db.getCollection("Collection name"); BasicDBObject document = new BasicDBObject(); document.put("_id",value); document.put("Name", name); table1.insert(document);
u는 마지막으로 삽입 된 ID를 얻을 삽입 한 후 :
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);
간 유형 값 변환을 점점 후.
from https://stackoverflow.com/questions/3338999/get-id-of-last-inserted-document-in-a-mongodb-w-java-driver by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] DBRef와 MongoDB를를 조회하는 방법 (0) | 2019.12.13 |
---|---|
[MONGODB] 또 다른 컬렉션에 MongoDB를 컬렉션의 저장 부분 집합 (0) | 2019.12.13 |
[MONGODB] 몽구스의 스키마 변경 다루기 (0) | 2019.12.13 |
[MONGODB] MongoDB를 : 대신 '_id'출력 'ID' (0) | 2019.12.13 |
[MONGODB] 매일 그룹 내에서 MongoDB를 집계 [중복] (0) | 2019.12.13 |