2014-04-09 1 views
5

Mongo에 큰 데이터 피드를 실행하여 외부 클라이언트가 연결되어 있어야하며 마지막으로 사용 가능한 레코드의 피드를 누릅니다. 현재보다 오래된 것은 아닙니다. 잘 작동하는 테이블 커서가 있지만 테이블의 시작 부분에서 시작하고 가장 최근에 삽입 된 레코드를 시작하고 싶습니다. 마지막으로 삽입 된 레코드의 _ID가 있다고 가정하고이를 수행하는 방법을 알고 있습니다. 내 문제는 Java에서 findOne이 제대로 작동하여 마지막으로 삽입 된 레코드를 가져올 수 없다는 것입니다. 간단히 말해,이 몽고 JS 명령에 대한 자바가 필요합니다Java MongoDB FindOne을 사용하여 마지막으로 삽입 한 레코드를 가져옵니다.

db.market.findOne({$query:{}, $orderby:{$natural:-1}}) 

이 비슷한 것 같다 내가 찾은 여기에 게시물의 몇 가지가 있지만, 그들은 클라이언트가 또한 하나 개의 삽입이라고 가정된다 레코드와 이미 사용 가능한 마지막 ID에 대한 지식이 있습니다.

어쨌든, 해당되는 Java 코드가 동일한 것, 즉 사용 가능한 마지막 레코드의 _ID를 얻는 것이 무엇이겠습니까?

대체 방법으로 내 클라이언트에 쓰레기 수거 기록을 삽입하고 그 ID를 얻은 다음 거기에서 시작할 수 있다고 생각하지만 올바른 방법을 선호합니다.

감사

+3

저는 하루 종일 찾고 있었고 기본적인 문서가 있지만 웹상 어디에서도 제로 예제를 발견 했으므로 작동하려고 시도한 순열을 얻을 수 없습니다. 그게 내가 여기서 묻는 이유입니다. – mikepinch

답변

23

분명히하기 위해, 자연 순서 덮인 컬렉션의 경우를 제외하고, 삽입 순서가 아닙니다. 정렬 기준은 다른 기준이 필요합니다.

기본 ObjectID를 사용 중이라고 가정하면 기본값을 삽입 시간 (밀리 초)으로 시작하고 항상 고유하므로이 값을 삽입 메트릭으로 사용할 수 있습니다.

또한 findOne 대신 find를 사용해야합니다. 다음보십시오 : 당신은 당신이 좋아한다 모시의 Java 코드 에서 작업을 수행하려는 경우

db.market.find({}).sort({_id:-1}).limit(1) 
+0

'.findOne' 대신'.find'가 필요한 이유는 무엇입니까? – naoxink

+4

findOne 쉘 도우미는 정렬 옵션 등을 설정할 수 없도록합니다. – daveh

1

을가이 문서를 반환합니다

Document myDoc = (Document)collection.find().sort(new BasicDBObject(<field>,-1)).first(); 

이 마지막이 중요한 분야 으로 정렬 삽입 한 =)

관련 문제