查询性能有点奇怪...我需要运行一个查询,该查询可以对文档总数进行计数,并且还可以返回可以限制和偏移的结果集。
因此,我总共有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});
});
});
count()
PHP不会默认limit
或不考虑默认函数,skip
除非告知这样做,否则只运行一个查询limit和skip然后获取计数应该会在这里提供最有效的解决方案。但是,如果您不进行两次查询以计算当前的内容,那么您将如何知道有57个文档呢?您是否有一个永不改变的静态数字?如果不是,那么您将需要同时进行跳过和限制,然后再进行计数。