Funciones de Agregación en MongoDB
$lookup, $match, $project, $replaceRoot, $sort
https://www.youtube.com/watch?v=25Ofy6G-zFQ
Colecciones Grupos
// Grupos
db.getCollection('grupos').find({});
db.grupos.deleteMany({});
db.grupos.insertMany([
{
'_id': 1.0, nombreg: 'ITICS', carrera: 'Ingenieria TIC'
},
{
'_id': 2.0, nombreg: 'ITIC82', carrera: 'Ingenieria TIC'
},
{
'_id': 3.0, nombreg: 'RT 51', carrera: 'Redes'
}
]);
Colecciones Alumnos
db.getCollection('alumnos').find({});
db.alumnos.deleteMany({});
db.alumnos.insertMany([
{'_id': 1.0, matricula: '126', nombre: 'Paty', app: 'Lpz', sexo: 'F', idg: 1, edad:20},
{'_id': 2.0, matricula: '545', nombre: 'Joel', app: 'Mdz', sexo: 'M', idg: 1, edad:25},
{'_id': 3.0, matricula: '654', nombre: 'Fernando', app: 'Rmz', sexo: 'M', idg: 2, edad:25},
{'_id': 4.0, matricula: '734', nombre: 'Laura', app: 'Hdz', sexo: 'F', idg: 2, edad:25},
{'_id': 5.0, matricula: '984', nombre: 'Memo', app: 'Trs', sexo: 'M', idg: 3, edad:30},
{'_id': 6.0, matricula: '404', nombre: 'Karla', app: 'Lpz', sexo: 'F', idg: 3, edad:23}
]);
Función aggregate() en MongoDB
La función aggregate() es el mecanismo principal de MongoDB para realizar consultas avanzadas y transformaciones de datos sobre una o varias colecciones.
Permite construir una tubería de etapas (pipeline) donde cada etapa aplica una operación específica:
$lookup Unión de Colecciones
- Une documentos de alumnos con grupos
- Campos comunes
localField: idg→foreignField: _id - Resultado: Los alumnos con la información de su grupo
db.alumnos.aggregate([
{$lookup: {
from: "grupos",
localField: "idg",
foreignField: "_id",
as: "grupo"
}}
]);
$match: Filtrado de documentos
- Similar a WHERE en SQL
{ $match: { sexo: "M", 'grupo.carrera': 'Ingenieria TIC' } }
$project
- Incluye/excluye campos
- Renombra
- Calcula nuevos valores
{$project: { _id: 0, matricula: 1, nombre_completo: { $concat: ["$nombre", " ", "$app"] }, edad: 1, sexo: 1, carrera: '$grupo.carrera', }}
$replaceRoot
- Aplana estructuras
- Muy útil después de
$lookup - Permite combinar el documento actual y uno interno
{$replaceRoot: {
newRoot: {
$mergeObjects: [
{$arrayElemAt: ["$grupo", 0] },
"$$ROOT"
]
}}
}
Resumen y $sort Ordenamiento
Orden ascendente (1) o descendente (-1)
{$match: {
edad: {$gte: 25},
carrera: 'Ingenieria TIC'
}},
{$sort: { nombre: -1 }},
{$project: {
_id: 0,
matricula: 1,
edad: 1,
nombre: {
$concat: ["$nombre", " ", "$app"]
},
carrera: 1,
nombreg: 1,
}}

