Começando com o Pipeline de Agregação

Importante

Você deseja migrar um aplicativo MongoDB existente ou usar recursos da Linguagem de Consulta do MongoDB (MQL)? Considere o Azure DocumentDB.

Você está procurando uma solução de banco de dados para cenários de alta escala com um SLA (contrato de nível de serviço 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 executem a análise e manipulação de dados avançada em suas coleções. O pipeline é uma sequência de operações de processamento de dados, que são executadas nos documentos de entrada para produzir uma saída computada. As fases do pipeline processam os documentos de entrada e passam seus resultados para o estágio 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 }])

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

Estágios de exemplo

O Cosmos DB for MongoDB fornece uma ampla variedade 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 de agregação 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 o próximo estágio.
  • $unwind: desconstrói um campo de matriz dos documentos de entrada para gerar um documento para cada elemento.

Para exibir todos os estágios disponíveis, confira recursos com suporte

Examples

Confira 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 de "quantity" maior que 20, você pode usar o seguinte pipeline:

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

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

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

Classificação: para classificar documentos pelo campo "price" 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 com 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 ] } } }
])

Desagregação: Para separar todos os subdocumentos do campo de matriz 'tags' e criar um novo documento para cada valor, você pode 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 exemplos chamada "sales" que tem documentos com os seguintes campos: "date", "category" e "sales".

O primeiro estágio { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } } filtra os documentos pelo campo "date", passando apenas documentos com uma 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".

O segundo estágio { $group: { _id: "$category", totalSales: { $sum: "$sales" } } } agrupa os documentos pelo campo "category" e calcula o total de vendas de cada grupo.

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

O quarto estágio { $limit: 5 } limita o número de documentos passados para o próximo estágio a apenas os 5 primeiros.

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

Próximas Etapas