$match: { date: { $gte: fromDate, $lte: toDate }, if (userId) { user: userId } }, Estoy tratando de hacer coincidir un usuario solo si hay un userId de usuario enviado. Cuál es la mejor manera de hacer esto.
Puede usar el generador de consultas mongoose para administrar las etapas de agregación según sus condiciones,
// INITIALIZE let p = YourSchemaModel.aggregate(); // DATE FILTER p.match({ date: { $gte: fromDate, $lte: toDate } }); // USER ID FILTER if (userId) p.match({ user: userId }); // RESULT let result = await p.exec();¡La agregación fusionará automáticamente las etapas
$matchsi ambas están juntas!
Segunda opción:
let result = await YourSchemaModel.aggregate().match( Object.assign( { date: { $gte: fromDate, $lte: toDate } }, userId ? { user: userId } : {} ) ).exec();