mongo查询时,能否先统计数量,再获取skip和limit后的值?

发布于 2022-09-06 12:37:29 字数 172 浏览 14 评论 0

因为经常要做分页, 所以需要用到 skip和limit来获取当前页的值,
但是 在获取总页数, 所以有没有方式可以在一次查询中获取 总页数和 当前页的值?

现在是 分两次查询,结果再结合在一起。

1. count()
2. .skip(*).limit(*)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

乱了心跳 2022-09-13 12:37:30

没有一次查询返回的,不过你可以将这两个方法封装一下,每次调用不就可以么?

async function getPage(pageNo, pageSize, query) {
    let count = await db.count(query);
    let list = await db.find(query).skip((pageNo - 1)*pageSize).limit(pageSize);
    return {
        count,
        list
    };
}
好听的两个字的网名 2022-09-13 12:37:30

楼上的表述基本正确。不过代码还有可以优化的地方。countfind/skip/limit是典型的可以并行的运算。上面的写法变成了查完一个再查另外一个,有违nodejs的理念。改进一下:

async function getPage(pageNo, pageSize, query) {
    result = await Promise.all([
        db.count(query),
        db.find(query).skip((pageNo - 1)*pageSize).limit(pageSize)
    ]);
    return {
        count: result[0],
        list: result[1]
    };
}
逐鹿 2022-09-13 12:37:30

我觉得楼上的两种做法欠妥,因为count的实现是这样的

> db.tasks.count
function ( x ){
    return this.find( x ).count();
}

这是在mongodb的cli里面输出的。
一句话概述就是count其实还是调用的find
所以这种查两次数据库的方法我认为是欠妥的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文