Agrupando Documentos por um Campo
O primeiro passo na agregação de dados é frequentemente agrupar documentos com base em um campo comum. Nesta etapa, você se conectará ao shell do MongoDB, criará um novo banco de dados e coleção e, em seguida, usará o operador $group para agrupar documentos por categoria.
Primeiro, abra o shell do MongoDB executando o seguinte comando no seu terminal:
mongosh
Uma vez dentro do shell, você verá um prompt test>. Vamos mudar para um novo banco de dados chamado salesdb e inserir alguns dados de produtos de exemplo. O MongoDB criará o banco de dados e a coleção automaticamente quando você inserir dados neles pela primeira vez.
Copie e cole os seguintes comandos no shell mongosh:
use salesdb
db.products.insertMany([
{ category: "Electronics", brand: "Apple", price: 1200 },
{ category: "Electronics", brand: "Samsung", price: 800 },
{ category: "Electronics", brand: "Sony", price: 950 },
{ category: "Apparel", brand: "Nike", price: 150 },
{ category: "Apparel", brand: "Adidas", price: 120 },
{ category: "Books", brand: "Penguin", price: 25 },
{ category: "Books", brand: "Penguin", price: 35 }
]);
Agora que você tem os dados, pode realizar uma agregação. O comando a seguir agrupa os documentos pelo campo category e calcula o preço total para cada categoria usando o acumulador $sum.
db.products.aggregate([
{
$group: {
_id: "$category",
totalPrice: { $sum: "$price" }
}
}
]);
Exemplo de Saída:
[
{ "_id": "Books", "totalPrice": 60 },
{ "_id": "Apparel", "totalPrice": 270 },
{ "_id": "Electronics", "totalPrice": 2950 }
]
Vamos detalhar a etapa de agregação:
db.products.aggregate([...]): Este é o método usado para realizar a agregação. Ele recebe um array de estágios, formando um pipeline.
$group: Este é o operador de estágio que agrupa os documentos de entrada.
_id: "$category": Esta expressão especifica a chave pela qual agrupar. Aqui, agrupamos pelo valor do campo category. O prefixo $ indica um caminho de campo.
totalPrice: { $sum: "$price" }: Este é um acumulador. Ele define um novo campo no documento de saída chamado totalPrice. O operador $sum calcula a soma do campo price para todos os documentos do grupo.