O pipeline de agregação suporta operações em coleçõesfragmentadas . Esta seção descreve comportamentos específicos para o pipeline de agregação e coleções fragmentadas.
Comportamento
Se o pipeline começar com um $match exato em uma chave de shard e o pipeline não contiver estágios$out ou $lookup, todo o pipeline será executado somente no shard correspondente.
Quando as operações de aggregation são executadas em vários shards, os resultados são encaminhados para o mongos a ser mesclado, exceto nos seguintes casos:
Se o pipeline incluir os estágios
$outou$lookup, a mesclagem será executada no fragmento primário.Se o pipeline incluir um estágio de classificação ou agrupamento e a configuração allowDiskUse estiver habilitada, a mesclagem será executada em um shard selecionado aleatoriamente.
Otimização
Ao dividir o pipeline de agregação em duas partes, o pipeline é dividido para garantir que os fragmentos executem o maior número possível de estágios, considerando a otimização.
Para ver como o pipeline foi dividido, inclua a opção explain no método db.collection.aggregate().
As otimizações estão sujeitas a alterações entre as versões.