MongoDB 使用 sort 对查询结果进行排序,使用 limit 和 skip 进行分页 — 这些方法链接在 find cursor 上。它们共同处理排序和返回数据页面,这对于显示结果至关重要。
sort — 排序结果
db..().({ : });
db..().({ : - });
db..().({ : , : });
db..().({ : - });
MongoDB 使用 sort 对查询结果进行排序,使用 limit 和 skip 进行分页 — 这些方法链接在 find cursor 上。它们共同处理排序和返回数据页面,这对于显示结果至关重要。
db..().({ : });
db..().({ : - });
db..().({ : , : });
db..().({ : - });
sort 接收一个字段:方向的文档(1 升序,-1 降序)。多个字段提供排序的平分手段。
db.users.find().sort({ name: 1 }).limit(10); // first 10 (page 1)
db.users.find().sort({ name: 1 }).skip(10).limit(10); // skip 10, take 10 (page 2)
// page N: .skip((N-1) * pageSize).limit(pageSize)
limit(n) 最多返回 n 个文档;skip(m) 跳过前 m 个文档。它们共同实现 offset 分页(通过 skip + limit 实现第 N 页)。
// ❌ pagination without sort → inconsistent order (pages may overlap/skip)
db.users.find().skip(10).limit(10);
// ✅ sort by a stable field for consistent pages
db.users.find().sort({ _id: 1 }).skip(10).limit(10);
没有 sort 的情况下,文档顺序不保证,所以分页可能不一致。分页时始终按稳定字段(如 _id)排序。
// ⚠️ skip(1000000) must scan/skip a million docs → slow on deep pages
// ✅ range-based (cursor) pagination — far more efficient for large datasets
db.users.find({ _id: { $gt: lastSeenId } }).sort({ _id: 1 }).limit(10);
// → use the last document's _id to fetch the next page (uses the index, no skipping)
Sorting on an INDEXED field is efficient. Sorting a large result set WITHOUT an index
requires an in-memory sort (limited size — can fail/be slow for big sorts).
→ Index fields you sort by.
排序和分页是 MongoDB 中 有效显示数据 的基础 — 对结果进行排序和返回可管理的页面是近乎普遍的需求(任何应用程序中的任何列表、feed 或表格),因此理解它们是基本的日常知识。
了解 sort(使用 1/-1 按字段排序,带平分手段)和 limit/skip(用于 offset 分页 — 返回数据页面)涵盖了呈现查询结果的常见需求。
有两个特别重要的实际要点:分页时始终排序(没有它,文档顺序不保证,导致页面不一致,可能重叠或跳过文档 — 这是真实的 bug,与 SQL 中的问题相同),以及理解 skip 在深层页面上很慢(它必须扫描并跳过所有前置文档)— 因此 基于范围的(cursor)分页(使用最后看到的 _id 来获取下一页,利用索引而不跳过)对于大型数据集而言效率更高,这是一种有价值的性能优化技术。
了解 按索引字段排序是高效的,而大型未索引排序可能很慢或失败(内存中排序限制)也很重要 — 对排序的字段建立索引。
由于排序和分页对于几乎任何数据显示都是必需的,并且一致性要求(为稳定分页排序)和性能考虑(skip 与基于范围的分页、索引排序)直接影响正确性和速度,理解 MongoDB 排序和分页 — sort、使用 skip/limit 的 offset 分页、稳定排序要求、高效的基于范围的替代方案和索引排序字段 — 是构建有效显示和高效呈现 MongoDB 数据的应用程序所必需的、经常应用的知识。