Aggregation pipeline e collections fragmentadas
Nesta página
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 o estágio
$out
, a mesclagem será executada no fragmento onde a coleção de saída reside.Se o pipeline incluir o estágio
$lookup
que faz referência a uma collection não fragmentada, a mesclagem será executada no fragmento onde a collection não fragmentada reside.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.