2013-03-08 42 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 2013-03-08 13:19:55

+0

我沒有索引。我嘗試將seq值存儲在另一個集合中。我想可能會加快執行時間。 – onurbaysan 2013-03-08 13:36:03

+0

也值得注意的是,如果大約32兆字節,內存中的排序有或沒有JS的限制。 – Sammaye 2013-03-08 13:44:16

回答

1

在您的收藏夾中添加seq索引,以便Mongo無需將整個集合加載到內存中進行排序。

此外,使用findOne代替find在當前的代碼中docs參數實際上是一個遊標對象,而不是用最大seq的文檔。如在:

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

謝謝你,約翰尼。我將「seq」值存儲在另一個集合中並加以解決。 – onurbaysan 2013-03-08 21:01:12