在实际开发中,我们经常需要对大量数据进行分页展示、排序处理或数量统计。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 的实际执行顺序固定为:
- 先排序 →
sort() - 再跳过 →
skip() - 最后限制返回数量 →
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(),可以轻松构建支持分页、排序和统计的高效数据查询逻辑,满足绝大多数业务场景需求。