En primer lugar la función:
static async getInitRegistrationMetric(account) { // we want only full day so we exclude current date const exclude = DateTime.now() .setZone('utc') .startOf('day') .toISODate(); // this count the number of client created by day. const groupByDate = { $group: { _id: { $dateToString: { format: '%Y-%m-%d', date: '$createdAt' }, }, count: { $sum: 1 }, }, }; // this is a way to rename (_id, count) to (date, value) const renameData = { $project: { _id: 0, date: '$_id', value: '$count', }, }; // this is done to filter data, I want to clean the null date and the today result const excludeTodayAndNull = { $match: { $and: [ { date: { $ne: exclude, }, }, { date: { $ne: null, }, }, ], }, }; // account is the mongoose model. return account.aggregate([groupByDate, renameData, excludeTodayAndNull]);}
este código producirá datos como este:
const data = [ { date: '2000-10-01', value: 50 }, { date: '2000-10-03', value: 12 }, { date: '2000-10-07', value: 112 }, ];el problema es que no tengo valor para el 2, 4, 5 y 6 del mes. Mi idea era obligar a mongo a "crear" un vacío válido para los otros días, así:
const data = [ { date: '2000-10-01', value: 50 }, { date: '2000-10-02', value: 0 }, { date: '2000-10-03', value: 12 }, { date: '2000-10-04', value: 0 }, { date: '2000-10-05', value: 0 }, { date: '2000-10-06', value: 0 }, { date: '2000-10-07', value: 112 }, ];¿Cómo puedo pedirle a "agregado" que llene el espacio entre fechas significativas con datos con 0 como valor?
Gracias
PD: ya lo hice por codigo en js pero se ve pesado y feo. Intento hacerlo más limpio.