MongoDB 分页、排序与统计查询技巧

简介: MongoDB 提供 `count()`、`sort()`、`skip()`、`limit()` 等链式方法,高效实现数据统计、分页与排序。支持多字段排序、条件分页,执行顺序固定为:先排序 → 再跳过 → 后限制数量,适用于各类业务场景的数据查询处理。(239字符)

在实际开发中,我们经常需要对大量数据进行分页展示、排序处理或数量统计。MongoDB 提供了简洁而强大的链式方法,如 count()sort()skip()limit(),能够高效满足这些需求。

一、统计查询

使用 count() 方法可以快速获取文档数量:

// 统计 comment 集合中的总评论数
db.comment.count()
// 统计 userid 为 "1003" 的评论数量
db.comment.count({userid: "1003"})

📌 注意:  

  • count() 在 MongoDB 新版本中已被标记为过时,推荐使用 db.collection.countDocuments()(精确计数)或 db.collection.estimatedDocumentCount()(快速估算);  
  • 但在大多数学习和旧项目环境中,count() 依然广泛使用且有效。

二、分页查询

分页是 Web 应用中最常见的需求之一。MongoDB 通过 skip()limit() 实现:

  • skip(N):跳过前 N 条记录;
  • limit(M):最多返回 M 条记录。
示例:每页显示 2 条评论
// 第 1 页(跳过 0 条,取 2 条)
db.comment.find().skip(0).limit(2)
// 第 2 页(跳过前 2 条,取接下来的 2 条)
db.comment.find().skip(2).limit(2)
// 第 3 页
db.comment.find().skip(4).limit(2)

分页公式(页码从 1 开始):  

skip((pageNum - 1) * pageSize).limit(pageSize)

三、排序查询

使用 sort() 方法对结果按字段排序:

  • 1 表示升序(从小到大,A→Z);
  • -1 表示降序(从大到小,Z→A)。
示例:
// 按 userid 降序,再按 likenum 升序
db.comment.find().sort({userid: -1, likenum: 1})

支持多字段排序,顺序由字段在对象中的位置决定。


四、执行顺序说明(重要!)

当同时使用 sort()skip()limit() 时,MongoDB 的实际执行顺序固定为

  1. 先排序sort()
  2. 再跳过skip()
  3. 最后限制返回数量limit()

🔍 这个顺序与你在代码中书写的顺序无关

例如,以下写法效果完全相同:

db.comment.find().limit(2).skip(2).sort({likenum: -1})
db.comment.find().sort({likenum: -1}).skip(2).limit(2)

五、综合示例:带条件的分页 + 排序

需求:查询用户 userid="1003" 的所有评论,按点赞数从高到低排序,每页 2 条,获取第 1 页数据。

db.comment.find({userid: "1003"})
  .sort({likenum: -1})
  .skip(0)
  .limit(2)

此查询可直接用于前端接口,实现高性能的动态列表加载。


通过灵活组合 count()sort()skip()limit(),可以轻松构建支持分页、排序和统计的高效数据查询逻辑,满足绝大多数业务场景需求。


相关文章
|
NoSQL MongoDB
12 MongoDB - 数据查询(消除重复)
12 MongoDB - 数据查询(消除重复)
593 0
|
12月前
|
NoSQL MongoDB 微服务
微服务——MongoDB常用命令——文档的分页查询
本文介绍了文档分页查询的相关内容,包括统计查询、分页列表查询和排序查询。统计查询使用 `count()` 方法获取记录总数或按条件统计;分页查询通过 `limit()` 和 `skip()` 方法实现,控制返回和跳过的数据量;排序查询利用 `sort()` 方法,按指定字段升序(1)或降序(-1)排列。同时提示,`skip()`、`limit()` 和 `sort()` 的执行顺序与编写顺序无关,优先级为 `sort()` > `skip()` > `limit()`。
411 1
|
3月前
|
安全 固态存储 Java
通用权限管理模型详解:从 ACL 到 RBAC0/1/2/3
本文深入解析ACL与RBAC两种主流权限模型,重点剖析RBAC的四个层级(RBAC0-RBAC3),涵盖角色继承、职责分离等核心机制,并结合实际场景给出选型建议,助你构建安全、可维护的权限体系。
|
SQL NoSQL Unix
MongoDB聚合操作总结
这篇文章总结了MongoDB中聚合操作的作用、方法、常见聚合表达式以及聚合管道的概念和常用操作符,以及SQL与MongoDB聚合操作的对应关系。
708 2
MongoDB聚合操作总结
|
前端开发 API UED
React 按需加载 Lazy Loading
随着 Web 应用复杂度增加,页面加载速度成为影响用户体验的关键因素。React 提供了按需加载(Lazy Loading)功能,通过 `React.lazy` 和 `Suspense` 实现动态加载组件,减少初始加载时间,提升性能。本文从基础概念入手,探讨常见问题、易错点及解决方案,并通过代码示例详细说明。
614 1
|
11月前
|
人工智能 安全 物联网
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
487 4
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
|
NoSQL MongoDB 数据库
MongoDB备份与恢复总结
MongoDB备份与恢复总结
1105 0
|
存储 监控 druid
Druid、ClickHouse、Doris、StarRocks 的区别与分析
本文对比了 Druid、ClickHouse、Doris 和 StarRocks 四款大数据分析引擎。它们均为 OLAP 引擎,采用列式存储和分布式架构,适用于海量数据分析。Druid 擅长实时分析与高并发查询;ClickHouse 以超高性能著称,适合复杂查询;Doris 提供易用的 SQL 接口,性能均衡;StarRocks 则以其极速查询和实时更新能力脱颖而出。各引擎在数据模型、查询性能、数据更新和存储方面存在差异,适用于不同的业务场景。选择时需根据具体需求综合考虑。
6832 20
|
存储 NoSQL 算法
MongoDB设置主键自增
【5月更文挑战第10天】
473 0

热门文章

最新文章