Estoy buscando cómo convertir este código en agregación de MongoDB. supongamos que tengo este servicio que contará la cantidad de juegos 'Fixtures' en cada deporte donde el juego comenzará pronto. Tengo dos modelos Fixture que significa el juego y Sport que será el deporte, cada Fixture tiene la identificación del deporte que nosotros pueden agruparse durante la agregación. Aquí hay un ejemplo de trabajo
export const countFixtures = async () => { const sports = await Sports.find(); const countFixturesBySport = []; for (let index = 0; index < sports.length; index++) { const sport = sports[index]; const countFixtures = await Fixture.countDocuments({ Sport: sport._id, StartDate: { $gt: new Date() }, }); countFixturesBySport.push({ sport: sport.Name, sportId: sport._id, fixturesCount: countFixtures, }); } return countFixturesBySport; };Empecé con este código en mongoDB:
await Sports.aggregate([ { $lookup: { from: 'fixture', let: { fixture: '$fixture' }, pipeline: [ { $match: { $expr: { $eq: ['$_id', '$$fixture'] } }, },{ $project: {$addFields: { sport:'Name', sportId:'_id', countFixture:'' }} ])Aquí tienes, estabas en el camino correcto usando $lookup , solo necesitabas algunos ajustes menores en la lógica real.
db.sports.aggregate([ { $lookup: { from: "fixture", let: { sportId: "$_id" }, pipeline: [ { $match: { $expr: { $eq: [ "$Sport", "$$sportId" ] } } }, { $project: { _id: 1 } } ], as: "matchedFixtures" } }, { $project: { _id: 0, sport: "$Name", sportId: "$_id", fixturesCount: { $size: "$matchedFixtures" } } } ])