Introdução ao pipeline de agregação

Importante

Você está procurando migrar um aplicativo MongoDB existente ou usar os recursos MQL (MongoDB Query Language)? Considere Azure DocumentDB.

Você está procurando uma solução de banco de dados para cenários de alta escala com um contrato de nível de serviço (SLA) de disponibilidade de 99.999%, dimensionamento automático instantâneo e failover automático em várias regiões? Considere Azure Cosmos DB para NoSQL.

O pipeline de agregação é uma ferramenta poderosa que permite que os desenvolvedores realizem análises e manipulações avançadas de dados em suas coleções. O pipeline é uma sequência de operações de processamento de dados, que são realizadas nos documentos de entrada para produzir uma saída calculada. As fases do pipeline processam os documentos de entrada e passam o resultado para a fase seguinte. Cada estágio executa uma operação específica nos dados, como filtragem, agrupamento, classificação e transformação.

Sintaxe básica

A sintaxe básica para um pipeline de agregação é a seguinte:

db.collection.aggregate([    { stage1 },    { stage2 },    ...    { stageN }])

Onde db.collection é a coleção MongoDB na qual você deseja executar a agregação e stage1, stage2, ..., stageN são os estágios de pipeline que você deseja aplicar.

Fases da Amostra

O Cosmos DB para MongoDB fornece uma ampla gama de estágios que você pode usar em seu pipeline, incluindo:

  • $match: Filtra os documentos para passar apenas os documentos que correspondem à condição especificada.
  • $project: Transforma os documentos em um novo formulário adicionando, removendo ou atualizando campos.
  • $group: Agrupa documentos por um ou mais campos e executa várias funções agregadas nos dados agrupados.
  • $sort: Classifica os documentos com base nos campos especificados.
  • $skip: ignora o número especificado de documentos.
  • $limit: Limita o número de documentos passados para a próxima etapa.
  • $unwind: Desconstrói um campo de matriz dos documentos de entrada para produzir um documento para cada elemento.

Para visualizar todos os estágios disponíveis, consulte os recursos suportados

Examples

Aqui estão alguns exemplos de como você pode usar o pipeline de agregação para executar várias operações em seus dados:

Filtragem: para filtrar documentos com um campo "quantidade" maior que 20, você pode usar o seguinte pipeline:

db.collection.aggregate([
    { $match: { quantity: { $gt: 20 } } }
])

Agrupamento: Para agrupar documentos pelo campo "categoria" e calcular a "quantidade" total para cada grupo, você pode usar o seguinte pipeline:

db.collection.aggregate([
    { $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])

Classificação: para classificar documentos pelo campo "preço" em ordem decrescente, você pode usar o seguinte pipeline:

db.collection.aggregate([
    { $sort: { price: -1 } }
])

Transformação: Para adicionar um novo campo "desconto" a documentos que têm um "preço" maior que 100, você pode usar o seguinte pipeline:

db.collection.aggregate([
    { $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])

Desmembramento: Para separar todos os subdocumentos do campo de matriz 'tags' e criar um novo documento para cada valor, pode-se usar o seguinte pipeline:

db.collection.aggregate([
    { $unwind: "$tags" }
])

Exemplo com vários estágios

db.sales.aggregate([
  { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
  { $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
  { $sort: { totalSales: -1 } },
  { $limit: 5 }
])

Neste exemplo, estamos usando uma coleção de exemplo chamada "vendas", que tem documentos com os seguintes campos: "data", "categoria" e "vendas".

A primeira etapa { $match: { data: { $gte: "2021-01-01", $lt: "2021-03-01" } } } filtra os documentos pelo campo "data", passando apenas documentos com data entre 1º de janeiro de 2021 e 28 de fevereiro de 2021. Estamos usando um formato de data de cadeia de caracteres com o formato "AAAA-MM-DD".

A segunda etapa { $group: { _id: "$category", totalSales: { $sum: "$sales" } } } agrupa os documentos pelo campo "categoria" e calcula o total de vendas para cada grupo.

O terceiro estágio { $sort: { totalSales: -1 } } classifica os documentos pelo campo "totalSales" em ordem decrescente.

A quarta fase { $limit: 5 } limita o número de documentos passados para a fase seguinte apenas aos 5 primeiros classificados.

Como resultado, o pipeline retornará as 5 principais categorias por vendas totais para o intervalo de datas especificado.

Passos seguintes

  • Saiba como usar o Studio 3T com o Azure Cosmos DB para MongoDB.
  • Saiba como usar o Robo 3T com o Azure Cosmos DB para MongoDB.
  • Explore amostras do MongoDB com o Azure Cosmos DB para MongoDB.
  • Tentando fazer o planejamento de capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre seu cluster de banco de dados existente para planejamento de capacidade.