在查询性能方面有点奇怪...我需要运行一个查询来完成文档的总计数,并且还可以返回一个可以限制和偏移的结果集.
所以,我总共有57个文档,用户希望10个文档偏移20个.
我可以想到两种方法,首先查询所有57个文档(作为数组返回),然后使用array.slice返回他们想要的文档.第二个选项是运行2个查询,第一个使用mongo的本机'count'方法,然后使用mongo的本机$ limit和$ skip聚合器运行第二个查询.
您认为哪个会更好地扩展?在一个查询中完成所有操作,还是运行两个单独的查询?
编辑:
// 1 query
var limit = 10;
var offset = 20;
Animals.find({}, function (err, animals) {
if (err) {
return next(err);
}
res.send({count: animals.length, animals: animals.slice(offset, limit + offset)});
});
// 2 queries
Animals.find({}, {limit:10, skip:20} function (err, animals) {
if (err) {
return next(err);
}
Animals.count({}, function (err, count) {
if (err) {
return next(err);
}
res.send({count: count, animals: animals});
});
});
Run Code Online (Sandbox Code Playgroud) 我有兴趣优化我正在使用MongoDB的"分页"解决方案.我的问题很直接.我通常会限制使用该limit()功能返回的文档数量.这迫使我发出一个没有该limit()函数的冗余查询,以便我也可以捕获查询中的文档总数,这样我就可以将其传递给客户端,让他们知道他们必须发出额外的请求.检索其余文件.
有没有办法将其压缩为1个查询?获取文档总数但同时仅使用limit()?检索子集?是否有不同的方式来思考这个问题,而不是接近它?
pagination mongodb casbah mongodb-query aggregation-framework