Agregação
Nesta página
Visão geral
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.
Analogia
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 aggregation pipeline é a linha de montagem, estágios de aggregation são as estações de montagem e operadores de expressão são as ferramentas especializadas.
Comparação de operações de agregação e query
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 algumaslimitaçõ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. Você pode exceder esse limite configurando a propriedade
allowDiskUse
deAggregateOptions
paratrue
. Consulte a documentação da API AggregateOptions para mais detalhes.
Importante
exceção $graphLookup
O estágio $graphLookup tem um limite de memória rigoroso de 100 megabytes e ignorará allowDiskUse
.
Referências
Para ver uma lista completa de operadores de expressão, consulte Operadores de agregação no manual do servidor.
Para saber como criar um pipeline de agregação e ver exemplos, consulte Pipeline de agregação no manual do servidor.
Para saber mais sobre a criação de estágios de pipeline, consulte Estágios de agregação no manual do servidor.
Exemplos executáveis
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"); // Create sample documents 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" }, ]; // Insert documents into the restaurants collection 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.
Exemplo de agregaçã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 elementoBakery
.Um estágio $group para agrupar os documentos correspondentes pelo campo
stars
, acumulando uma contagem de documentos para cada valor distinto destars
.
// Define an aggregation pipeline with a match stage and a group stage const pipeline = [ { $match: { categories: "Bakery" } }, { $group: { _id: "$stars", count: { $sum: 1 } } } ]; // Execute the aggregation const aggCursor = coll.aggregate(pipeline); // Print the aggregated results for await (const doc of aggCursor) { console.log(doc); }
Este exemplo produz 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().
Exemplos adicionais
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.