2017-03-01 3 views
0

Java MongoDB 드라이버를 사용하여 MongoDB에 항목을 삽입하려고합니다. 삽입하기 위해 nextId를 삽입하려고하지만 다음 이유가 무엇인지 확실하지 않습니다. Mongo에 항목을 삽입하기 전에 nextId를 얻기 위해 아래 주어진 메소드를 사용합니다.Java Mongo DB 유효한 다음 ID를 얻을 수 없습니다.

private Long getNextIdValue(DBCollection dbCollection) { 

    Long nextSequenceNumber = 1L; 

    DBObject query = new BasicDBObject(); 
    query.put("id", -1); 

    DBCursor cursor = dbCollection.find().sort(query).limit(1); 

    while (cursor.hasNext()) { 
     DBObject itemDBObj = cursor.next(); 
     nextSequenceNumber = new Long(itemDBObj.get("id").toString()) + 1; 
    } 

    return nextSequenceNumber; 
} 

내 mongodb 컬렉션에 총 13 개의 레코드가 있습니다. 여기서 내가 잘못하고있는 것은 무엇입니까?

+0

컬렉션의 문서 수를 얻기 위해 db.collection.count()를 사용하고 nextID를 얻기 위해 결과를 1 씩 증가시킵니다. – Cassian

+0

문서 id에 증가 정수를 사용하지 않는 것이 좋습니다 **. [공식 가이드] (https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/#considerations)는 "_ 일반적으로 MongoDB에서는 자동 증가 패턴을 사용하지 않을 것입니다 _id 필드 또는 모든 필드의 경우, 많은 수의 문서가있는 데이터베이스의 크기가 조정되지 않기 때문에. –

답변

0

제발 그렇게하지 마십시오. 모든 entites를 삽입

@Id 
@ObjectId 
private String id; 

그런 다음 일반적인 방법을 쓰기 : 드라이버가 이미 최선의 방법으로이 작업을 수행 그냥 필드에 적합한 유형과 주석을 사용할 때 당신은 나쁜 관리 ID 상황을 만들 필요가 없습니다 :

public T create(T entity) throws MongoException, IOException { 

    WriteResult<? extends Object, String> result = jacksonDB.insert(entity); 

    return (T) result.getSavedObject(); 
} 

이렇게하면 "다음 ID"를 얻는 것보다 훨씬 강력한 ID 기반 시간 기반 색인 해시가 만들어집니다.

https://www.tutorialspoint.com/mongodb/mongodb_objectid.htm

+0

숫자 맞춤 자동 증가 ID가 1,2,3,4 –

+0

으로 필요합니다. 내부 드라이버 구현과 관련되어 있기 때문에 "id"또는 "_id"로 사용할 수 없습니다. 그래서 당신이 "서수"또는 다른 것을 명명 한 다른 것을 만들고 싶다면. 하지만 NoSQL 컨텍스트에서 ID를 사용하여 잘못된 방식으로 작업하도록 강요하지 마십시오. 관계형 데이터베이스 개념을 사용하려고합니다. 그냥 다르다. –

0

어떻게 이런 시퀀스 모음을 만들려고

nextSequenceNumber = new Long(itemDBObj.get("id").toString()) + 1; 

문자열

에 +1 같은 산술 연산을 수행 할 수 있습니다.
{"id":"MySequence","sequence":1} 

가 그럼 난 b.collection.count()를 사용하여 주변의 일을 발견

// Query for sequence collection 
Query query = new Query(new Criteria().where("id").is("MySequence")); 

//Increment the sequence by 1 
Update update = new Update(); 
update.inc("sequence", 1); 

FindAndModifyOptions findAndModifyOptions = new FindAndModifyOptions(); 
findAndModifyOptions.returnNew(true); 

SequenceCollection sequenceCollection = mongoOperations.findAndModify(query, update,findAndModifyOptions, SequenceCollection.class); 
return sequenceModel.getSequence(); 
0

아이디를 증가 업데이트를 사용합니다. 나는 단순히 ID를 할당 할 1 씩 증가의 총 수와를 찾아 내 목적.

관련 문제