聚合管道和分片集合
聚合管道支持对分片的集合进行操作。 本节介绍特定于聚合管道和分分片的集合的行为。
行为
如果管道以分片键上的确切 $match
开始,并且管道不包含 $out
或 $lookup
阶段,则整个管道仅在匹配的分片上运行。
当聚合操作在多个分片上运行时,结果会被路由到 mongos
进行合并,以下情况除外:
如果管道集合
$out
阶段,则合并在输出分片所在的分片上运行。如果管道集合引用未分片集合的
$lookup
阶段,则合并将在未分片分片所在的分片上运行。如果管道包含排序或分组阶段,且启用了 allowDiskUse 设置,则合并会在随机选择的分片上运行。
优化
将聚合管道分割为两部分时,管道的分割是为了确保分片执行尽可能多的阶段,并考虑到优化。
要如需查看管道是如何分割的,请在 db.collection.aggregate()
方法中加入 explain
选项。
优化可能因版本而异。