2013-03-08 57 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