$graphLookup (Busca em Grafo)
Última atualização: 2026-10-09
$graphLookup (Busca em Grafo)
$graphLookup realiza buscas recursivas em uma coleção, emulando a travessia de grafos: a partir dos valores de connectFromField, ele combina recursivamente com connectToField até maxDepth ou até não restarem correspondências, armazenando os resultados em as. Ideal para organogramas, árvores de categorias e contagem de saltos. Ao contrário de $lookup, ele recursa em profundidade arbitrária.
| Categoria | Avançado e Diagnóstico |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $graphLookup: { from: "<collection>", startWith: <expression>, connectFromField: "<field>", connectToField: "<field>", as: "<outputField>", maxDepth: <number>, depthField: "<depthField>" } }
⚙️ Parâmetros
| from | Coleção de destino para pesquisas recursivas. |
|---|---|
| startWith | Expressão para o valor que inicia a recursão. |
| connectFromField | Campo no documento atual que contém o valor correspondente. |
| connectToField | Campo na coleção de destino que é correspondido. |
| as | Nome do campo que recebe os resultados da recursão. |
| maxDepth | Profundidade máxima de recursão; ilimitada quando omitida. |
Retorno:Cada documento acrescido de uma matriz de resultados de recursão
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $graphLookup: monta a cadeia de subordinação por funcionário
db.employees.aggregate([
{ $graphLookup: {
from: 'employees',
startWith: '$reportsTo',
connectFromField: 'reportsTo',
connectToField: 'name',
as: 'chain'
} }
])
Saída:
// Cada documento de funcionário ganha um array chain de gerentes
📌 Notas
- Indexe connectToField para acelerar a recursão
- Os resultados incluem os documentos combinados recursivamente, não o documento inicial
- maxDepth 0 combina apenas um nível
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual é a diferença entre $graphLookup e $lookup?
A$lookup faz uma junção de um nível; $graphLookup recursa por muitos níveis.
QA recursão pode entrar em loop infinito?
AEla recursa até não restarem correspondências; limite com maxDepth.
QO resultado inclui o próprio documento?
ANão. startWith é a semente; os resultados são outros documentos que correspondem a ela.