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