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 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.
Agregação vs. operações de consulta
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
deAggregateOptions
totrue
. 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
.
Referências úteis
Para saber mais sobre conceitos de aggregation, consulte as seguintes páginas 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"); 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.
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
.
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().
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.