Docs 菜单

聚合管道和分片集合

在此页面上

聚合管道支持针对分片集合的操作。本部分介绍聚合管道和分片集合的特定行为。

如果管道严格以 $match 开头(位于分片键上),并且管道不包含 $out$lookup 阶段,则整个管道都只在匹配的分片上运行。

当聚合操作在多个分片上运行时,结果会被路由到 mongos 进行合并,以下情况除外:

  • 如果管道集合$out阶段,则合并在输出分片所在的分片上运行。

  • 如果管道集合引用未分片集合的$lookup阶段,则合并将在未分片分片所在的分片上运行。

  • 如果管道包含排序或分组阶段,且启用了 allowDiskUse 设置,则合并会在随机选择的分片上运行。

将聚合管道分割为两部分时,管道的分割是为了确保分片执行尽可能多的阶段,并考虑到优化。

要如需查看管道是如何分割的,请在 db.collection.aggregate() 方法中加入 explain 选项。

优化可能因版本而异。

在此页面上