Processamento de grafos nativo com MongoDB

0

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!

Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com