Mongoose 限制/偏移量和计数查询

2024-05-12

查询性能有点奇怪......我需要运行一个查询来计算文档总数,并且还可以返回一个可以限制和偏移的结果集。

所以,我总共有 57 个文档,用户想要 10 个文档偏移 20。

我可以想到两种方法来做到这一点,首先是查询所有 57 个文档(以数组形式返回),然后使用 array.slice 返回他们想要的文档。第二个选项是运行 2 个查询,第一个查询使用 mongo 的本机“count”方法,然后使用 mongo 的本机 $limit 和 $skip 聚合器运行第二个查询。

您认为哪一个可以更好地扩展?在一个查询中完成所有操作,还是运行两个单独的查询?

Edit:

// 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});
    });
});

我建议你使用2个查询:

  1. db.collection.count()将返回项目总数。该值存储在 Mongo 中的某个位置,并且不会被计算。

  2. db.collection.find().skip(20).limit(10)这里我假设您可以使用某个字段进行排序,所以不要忘记在该字段上添加索引。这个查询也会很快。

我认为您不应该查询所有项目而不是执行跳过和获取,因为稍后当您拥有大数据时,您会遇到数据传输和处理问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongoose 限制/偏移量和计数查询 的相关文章

随机推荐