Javascript 通过更好的排序加快MongoDB find()的速度?(使用猫鼬orm)

Javascript 通过更好的排序加快MongoDB find()的速度?(使用猫鼬orm),javascript,node.js,mongodb,database,nosql,Javascript,Node.js,Mongodb,Database,Nosql,现在我有这样的事情 Item.find({}, function (docs) { for (var i = docs.length-15; i < docs.length; i++){ client.send(JSON.stringify(docs[i])); } }); 这可能吗?会有帮助吗 谢谢 如果您只对第一个(或最后一个,如使用\u id:-1排序)15个文档感兴趣,那么是的,对查询设置限制是一个非常好的主意。在第

现在我有这样的事情

Item.find({}, function (docs) {
    for (var i = docs.length-15; i < docs.length; i++){
     client.send(JSON.stringify(docs[i]));
    }                   
});
这可能吗?会有帮助吗


谢谢

如果您只对第一个(或最后一个,如使用
\u id:-1
排序)15个文档感兴趣,那么是的,对查询设置限制是一个非常好的主意。在第一个示例中,对客户端的限制意味着数据库将每个文档发送给客户端,然后客户端将忽略最后15个文档之外的每个文档

但是,用于指定限制的Mongoose语法与MongoShell语法不同,我认为您需要的是:

Item.find().sort([['_id','descending']]).limit(15).each(function(doc) {
  client.send(JSON.stringify(doc));
});

如果我没有弄错的话,您可以在Mongoose查询上链接许多操作,然后调用
each
,将其发送并将结果的每个文档传递给回调。

从中我可以看出,因为Mongoose1.0.14sort()参数已略有更改,不再接受数组。此外,您似乎需要对find调用返回的实际查询对象再次调用find()(还要注意err对象)。因此:-


希望您可以做您需要的事情。

@Theo我得到了这个错误:
错误:错误:非法排序子句,必须是[['field1','(升序|降序)],'field2','(升序|降序)]\n
嗯,可能有一级数组太多了,试试
排序(['u id','降序])
(注意只有一级方括号)。我也更新了答案。你错过了客户端的结束部分。发送,否?@Theo,hrrm不确定发生了什么,它仍然会导致相同的错误。根据我通过谷歌
排序([[['''id','descending']])找到的所有信息,是否正确的语法(从一开始就是正确的)。Mongoose文档非常糟糕。抱歉,但我不知道它为什么不起作用。即使是错误消息也没有任何意义。谢谢你,伙计。出于某种原因,你在那里的东西不起作用,但对每一个都做了一点小小的调整!Item.find().sort(“'u id','descending')。limit(15)。each(函数(err,doc){client.send(JSON.stringify(doc));});
那个愚蠢的猫鼬…再次感谢manAlso的注意,出于某种原因,它似乎总是返回一个额外的文档,它只是
null
。所以你可能需要if(doc!=null){}或者其他一些东西,这取决于你对数据的处理方式。是的,如果我不使用find()调用并使用each()相反,我只得到一个{doc:}对象,而不是它们的数组。不过,我在这里使用的是Mongoose1.2.0。无论如何,很高兴它起到了一点作用。:)
Item.find().sort([['_id','descending']]).limit(15).each(function(doc) {
  client.send(JSON.stringify(doc));
});
  Item.find().sort('_id','descending').limit(15).find(function(err, doc) {
    client.send(JSON.stringify(doc));
  });