Agrupar Documentos por un Campo
El primer paso en la agregación de datos suele ser agrupar documentos basándose en un campo común. En este paso, se conectará al shell de MongoDB, creará una nueva base de datos y colección, y luego utilizará el operador $group para agrupar documentos por categoría.
Primero, abra el shell de MongoDB ejecutando el siguiente comando en su terminal:
mongosh
Una vez dentro del shell, verá un prompt test>. Cambiemos a una nueva base de datos llamada salesdb e insertemos algunos datos de productos de ejemplo. MongoDB creará la base de datos y la colección automáticamente cuando inserte datos en ellas por primera vez.
Copie y pegue los siguientes comandos en el 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 }
]);
Ahora que tiene datos, puede realizar una agregación. El siguiente comando agrupa los documentos por el campo category y calcula el precio total para cada categoría utilizando el acumulador $sum.
db.products.aggregate([
{
$group: {
_id: "$category",
totalPrice: { $sum: "$price" }
}
}
]);
Salida de ejemplo:
[
{ "_id": "Books", "totalPrice": 60 },
{ "_id": "Apparel", "totalPrice": 270 },
{ "_id": "Electronics", "totalPrice": 2950 }
]
Analicemos la etapa de agregación:
db.products.aggregate([...]): Este es el método utilizado para realizar la agregación. Toma una matriz de etapas, formando un pipeline.
$group: Este es el operador de etapa que agrupa los documentos de entrada.
_id: "$category": Esta expresión especifica la clave por la que agrupar. Aquí, agrupamos por el valor del campo category. El prefijo $ indica una ruta de campo.
totalPrice: { $sum: "$price" }: Este es un acumulador. Define un nuevo campo en el documento de salida llamado totalPrice. El operador $sum calcula la suma del campo price para todos los documentos del grupo.