복붙노트

[MONGODB] / 자바 드라이버와 MongoDB를 지난 삽입 된 문서의 ID를 가져옵니다

MONGODB

/ 자바 드라이버와 MongoDB를 지난 삽입 된 문서의 ID를 가져옵니다

자바 드라이버를 사용하여 MongoDB를 인스턴스의 마지막 삽입 된 문서의 ID (OBJECTID)를 얻을 수있는 쉬운 방법이 있습니까?

해결법

  1. ==============================

    1.난 그냥 당신이 할 수있는 실현 :

    난 그냥 당신이 할 수있는 실현 :

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

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

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

    4.(1.5.4 기준)에도 upsert을 나는 자바 드라이버에 대해 알고하지 않습니다하지만 후대를 들어,을 GetLastError 명령은 쓰기의 _id를 얻을 수 실행할 수 있습니다

    (1.5.4 기준)에도 upsert을 나는 자바 드라이버에 대해 알고하지 않습니다하지만 후대를 들어,을 GetLastError 명령은 쓰기의 _id를 얻을 수 실행할 수 있습니다

  5. ==============================

    5.문서가 MongoDB의 컬렉션에 삽입 한 후에, 성공적으로 삽입 필수 필드 (즉. _id)를 업데이트한다. 당신은 _id의 삽입 된 개체를 조회 할 수 있습니다.

    문서가 MongoDB의 컬렉션에 삽입 한 후에, 성공적으로 삽입 필수 필드 (즉. _id)를 업데이트한다. 당신은 _id의 삽입 된 개체를 조회 할 수 있습니다.

  6. ==============================

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

    7.나는이에 대한 답은 "아니오"라고 생각합니다.

    나는이에 대한 답은 "아니오"라고 생각합니다.

    당신이 할 수있는 일은 중 하나를 수동으로 자신을 _ID하여 제공하거나 (BasicBDDocument이 바로 이러한 작업을 수행하는 것 임) CollectibleCodec 메커니즘을 구현합니다. 그러나이 모든 솔루션은 ID의 클라이언트 측을 생성하는 것을 포함한다.

    그런 말을하는 데, 나는 _id 클라이언트 측 생성에 문제가 있다고 생각하지 않습니다.

  8. ==============================

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

    간 유형 값 변환을 점점 후.

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