2013-03-08 3 views
2

아래 코드에 문제가 있습니다. 나는 '링크'컬렉션에서 최대 (seq)를 얻으려고합니다. 아래 코드를 실행 한 후 "치명적인 오류 : JS 할당에 실패했습니다 - 메모리 부족 처리"오류가 발생합니다. 어떻게 그 문제를 극복 할 수 있습니까? 답장을 보내 주셔서 감사합니다.mongodb 컬렉션의 최대 요소 가져 오기

db.collection('links', function(err, collection) { 
     var options = { "limit": 1, "sort": [['seq','desc']]}; 

     collection.find({}, options , function(err, docs) {    
      console.log("Returned #" + docs.seq + " documents"); 
     }); 
}); 

참고 : 노드의 메모리 사용량이 매우 그런데, 실행 한 후 증가했다.

+0

'seq'에 색인이 있습니까? 그렇지 않은 경우 해당 쿼리는 전체 콜렉션을 메모리에로드해야합니다. – JohnnyHK

+0

색인이 없습니다. 다른 컬렉션에 seq 값을 저장하려고합니다. 실행 시간이 빨라질 수도 있습니다. – onurbaysan

+0

약 32 메가 바이트 인 경우 메모리 내 정렬에 JS가 있거나없는 제한이 있음에 유의하십시오. – Sammaye

답변

1

seq에 색인을 추가하면 Mongo가 전체 모음을 메모리에로드하여 정렬 할 필요가 없습니다. 현재 코드에서 docs 매개 변수가 실제로 커서 객체가 아닌 최대 seq와 문서와 같이

또한, findOne 대신 find 사용합니다. 예 :

var options = { "sort": [['seq','desc']] }; 
collection.findOne({}, options , function(err, doc) { 
    console.log("Returned #" + doc.seq + " documents"); 
}); 
+0

고마워, 조니. 다른 컬렉션에 "seq"값을 저장하고이를 극복했습니다. – onurbaysan

관련 문제