mongoose限制/偏移和计数查询
查询性能奇怪的一个位…我需要运行一个查询文件的总数,也可以返回一个可以被限制和抵消的结果集。
所以,我总共有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}); }); });
我build议你使用2个查询:
-
db.collection.count()
将返回项目总数。 这个值存储在Mongo的某个地方,不会被计算。 -
db.collection.find().skip(20).limit(10)
这里我假设你可以使用某个字段进行sorting,所以不要忘记在这个字段上添加一个索引。 这个查询也会很快。
我认为你不应该查询所有的项目,而是执行跳过和采取,导致以后当你有大数据,你会有数据传输和处理的问题。