在MongoDB聚合管道中,每个阶段的记录流发生一次/一批(或)将等待当前阶段完成整个集合,然后再传递给下一个阶段?
对于例如,我有以下样本记录
{name: "Person1", marks: 20}
{name: "Person2", marks: 20}
{name: "Person1", marks: 20}
我共有1000条记录,大约100名学生和我有以下汇总查询
db.classtest.aggregate(
[
{$sort: {name: 1}},
{$group: {_id: '$name',
total: {$sum: '$marks'}}},
{$limit: 5}
])
我有以下问题的集合classtest。
- 排序顺序在最终结果中丢失。如果我在$ group之后放置另一种排序,则结果会正确排序。这是否意味着$组不保持以前的排序顺序?
- 我想将结果限制为5.群组操作是否必须完全完成(对于所有1000条记录)才能通过限制。 (或)小组操作是否通过记录来限制阶段和何时有记录,并在达到限制阶段的要求时停止处理?
我的实际想法是对聚合结果进行分页。在上面的情况下,如果$ group维护排序顺序并仅处理所需的记录数,我想在后续页面查询中应用$match condition {$ge: 'lastPersonName'}
。
- 我不想在$ group之前应用$限制,因为我想要5个学生的结果而不是第5个记录。
- 我可能不想使用$ skip,因为这意味着有效地遍历那些许多记录。