O recém-lançado MongoDB 3.4 está cheio de novos recursos poderosos. Em particular, existem 27 novos conceitos de agregação, dos quais os mais interessantes na minha opnião é o $ graphLookup. Neste artigo, mostrarei como $graphLookup funciona e no que ele é útil.
$graphLookup é um novo estágio de framework de agregação que pesquisa recursivamente através de uma coleção através de processamento em algoritmos baseados em grafos:
{
$graphLookup: {
from: <collection>,
startWith: <expression>,
connectFromField: <string>,
connectToField: <string>,
as: <string>,
maxDepth: <number>,
depthField: <string>,
restrictSearchWithMatch: <document>
}
}
Para um exemplo concreto, vamos inserir 5 documentos em uma coleção:
db.customers.insertMany([ { _id: 1, name: 'Luke Skywalker', friends: [2, 3] }, { _id: 2, name: 'Han Solo', friends: [1, 3, 4] }, { _id: 3, name: 'Leia Organa', friends: [1, 3] }, { _id: 4, name: 'Lando Calrissian', friends: [2, 5] }, { _id: 5, name: 'Tendra Risant', friends: [4] } ]);
Luke Skywalker possui 2 amigos, Han e Leia. Mas como você determina quem são o segundo nível (amigos de amigos) de Luke? É aí que $ graphLookup entra:
db.customers.aggregate([ { $match: { _id: 1 } }, // Only look at Luke Skywalker { $graphLookup: { from: 'customers', // Use the customers collection startWith: '$friends', // Start looking at the document's `friends` property connectFromField: 'friends', // A link in the graph is represented by the friends property... connectToField: '_id', // ... pointing to another customer's _id property maxDepth: 1, // Only recurse one level deep as: 'connections' // Store this in the `connections` property } } ]);
Descubra padrões e descubra conexões. O operador $ graphLookup permite o processamento de gráficos nativos no MongoDB para que você possa navegar com eficiência árvores, gráficos e dados hierárquicos sem depender de um banco de dados orientados à grafos
Você ainda pode aprender mais sobre esta e outras funcionalidades neste webnar gratuito.
Um grande abraço a todos!