Menu Docs
Página inicial do Docs
/ / /
Node.js
/

Agregação

Nesta página

  • Visão geral
  • Analogia
  • Agregação vs. operações de consulta
  • Referências úteis
  • Exemplos executáveis
  • Exemplo de agregação
  • Exemplos adicionais

Neste guia, você pode aprender como usar as operações de agregação no driver MongoDB Node.js.

Operações de aggregation são expressões que você pode utilizar para produzir resultados reduzidos e resumidos no MongoDB. A framework de aggregation do MongoDB permite que você crie um pipeline que consiste em um ou mais estágios, cada um dos quais executa uma operação específica em seus dados.

Você pode pensar no aggregation pipeline como uma fábrica de automóveis.A fabricação de automóveis exige o uso de estações de montagem organizadas em linhas de montagem. Cada estação possui ferramentas especializadas, como e soldadores. A fábrica transforma e reúne as peças e os materiais iniciais em produtos acabados.

O pipeline de agregação é a linha de montagem, estágios de agregação são as estações de montagem e expressões do operador são as ferramentas especializadas.

Utilizando operações de query, como o método find(), você pode executar as seguintes ações:

  • Selecione quais documentos devolver

  • Selecione quais campos retornar

  • ordenar os resultados

Usando operações de agregação, você pode executar as seguintes ações:

  • Executar todas as operações de consulta

  • Renomear campos

  • Calcular campos

  • Resumir dados

  • Agrupar valores

As operações de agregação têm algumas limitações:

  • Os documentos devolvidos não devem ultrapassar o limite de tamanho de documento BSON, que é de 16 megabytes.

  • Os estágios do pipeline têm um limite de memória de 100 megabytes por padrão. Se necessário, você pode exceder este limite configurando a propriedade allowDiskUse de AggregateOptions to true. Consulte a documentação da API AggregateOptions para obter mais detalhes.

Importante

exceção $graphLookup

O estágio $graphLookup tem um limite de memória rigoroso de 100 megabytes e ignorará allowDiskUse.

Para saber mais sobre conceitos de aggregation, consulte as seguintes páginas no manual do servidor:

O exemplo utiliza dados de amostra sobre restaurantes. O seguinte código insere dados na coleta do restaurants do banco de dados do aggregation :

const db = client.db("aggregation");
const coll = db.collection("restaurants");
const docs = [
{ stars: 3, categories: ["Bakery", "Sandwiches"], name: "Rising Sun Bakery" },
{ stars: 4, categories: ["Bakery", "Cafe", "Bar"], name: "Cafe au Late" },
{ stars: 5, categories: ["Coffee", "Bakery"], name: "Liz's Coffee Bar" },
{ stars: 3, categories: ["Steak", "Seafood"], name: "Oak Steakhouse" },
{ stars: 4, categories: ["Bakery", "Dessert"], name: "Petit Cookie" },
];
const result = await coll.insertMany(docs);

Dica

Para obter mais informações sobre como se conectar à sua implantação MongoDB, consulte o Guia de conexão.

Para executar uma agregação, passe uma lista de estágios de agregação para o método collection.aggregate().

No exemplo, o pipeline de agregação usa os seguintes estágios de agregação:

  • Um estágio $match para filtrar documentos cujo campo de array categories contém o elemento Bakery.

  • Um estágio $group para agrupar os documentos correspondentes pelo campo stars, acumulando uma contagem de documentos para cada valor distinto de stars.

const pipeline = [
{ $match: { categories: "Bakery" } },
{ $group: { _id: "$stars", count: { $sum: 1 } } }
];
const aggCursor = coll.aggregate(pipeline);
for await (const doc of aggCursor) {
console.log(doc);
}

Este exemplo deve produzir a seguinte saída:

{ _id: 4, count: 2 }
{ _id: 3, count: 1 }
{ _id: 5, count: 1 }

Para obter mais informações, consulte a documentação da API para aggregate().

Para exibir explicações passo a passo de tarefas comuns de aggregation, consulte os Tutoriais de aggregation.

Você pode encontrar outro exemplo de pipeline de agregação na postagem do blog Tutorial de framework de agregação com Node.js no site do MongoDB.

Voltar

Promessas