2011-04-26 7 views
17

websocket을 사용하여 node.js/MongoDB 인스턴스의 데이터를 클라이언트로 '스트리밍'하려고합니다. 그것은 모두 잘 작동하고 있습니다.MongoDB find() 결과 집합의 마지막 문서를 확인하십시오.

하지만 결과에서 마지막 문서를 식별하는 방법은 무엇입니까? 난 node-mongodb-native을 사용하여 node.js에서 MongoDB에 연결합니다.

단순화 된 예 :

db.collection.find().sort({ _id : -1 }).limit(1); 

참고 : 내가 익숙하지 오전 MongoDB를 OBJECTID 이후

collection.find({}, {}, function(err, cursor) { 
    if (err) sys.puts(err.message); 

    cursor.each(function(err, doc) { 
    client.send(doc); 
    });     
}); 
+0

이는 DB-예컨대에서 문서를 스트리밍하는 가장 좋은 방법하지 않을 수 있습니다. 이런 식으로 쿼리 할 수있는 것보다 빨리 문서를 삽입하면 어떻게 될까요? http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/ –

답변

28

는 (1) 제한을 사용하여 다음 하강, ID를 기준으로 정렬 할 수 있습니다 생성 날짜를 contatins node.js에서 위의 명령은 mongo 쉘 명령이며 node.js.로 쉽게 다시 작성할 수 있다고 가정합니다.

+1

을 참조하십시오. ObjectId에 ** 초 **를 나타내는 4 바이트 값이 포함되어 있기 때문에 오브젝트가 1 초보다 자주 생성되는 것은 아닙니다. 유닉스 시대부터. –

+2

@EddieJamsession 이론 상으로는 그렇지만 이것을 테스트 해 보셨습니까? –

+0

db.collection.find(). limit (1) .sort ({_id : -1}); // 이제 막 테스트 해봤습니다. 정렬은 마지막 메서드 여야합니다. –

1

회사의 컬렉션이 있습니다. 아래 스 니펫은 컬렉션의 마지막 문서를 제공합니다.

db.companies.find ({}, { "_ id": 1}). skip (db.companies.find(). count() - 1);

코드는 사용자 정의 값인 경우 항상 특정 패턴에 있지 않을 수 있으므로 _id에 의존 할 수 없습니다.

0

를 사용하여 정렬 및 제한, 당신은 커서를 사용하려는 경우는 :

var last = null; 
var findCursor = collection.find({}).cursor(); 
findCursor.on("data", function(data) { 
    last = data; 
    ... 
}); 
findCursor.on("end", function(data) { 
    // last result in last 
    .... 
}); 
관련 문제