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!
