Tengo un esquema de tarea de la siguiente manera:
const taskSchema = new mongoose.Schema({ uid: { type: String, default: "" }, status: { type: String, default: "" }, created_at: {type: Date} }Quiero consultar todas las tareas, agrupándolas de tal manera que obtenga un objeto con el recuento de tareas con diferentes estados para todas las fechas de un mes determinado.
Ejemplo: suponiendo que estamos haciendo esto para el mes de junio,
task = [ { uid: '1', status: 'completed', created_at: 29 - 06 - 2021, }, { uid: '2', status: 'pending', created_at: 27 - 06 - 2021, }, { uid: '3', status: 'missed', created_at: 24 - 06 - 2021, }, { uid: '4', status: 'completed', created_at: 13 - 06 - 2021, }, { uid: '5', status: 'pending', created_at: 24 - 06 - 2021, }, ]; res = [ { '13-06-2021': { pending: 0, missed: 1, completed: 0, }, }, { '29-06-2021': { pending: 0, missed: 0, completed: 1, }, }, { '27-06-2021': { pending: 1, missed: 0, completed: 0, }, }, { '24-06-2021': { pending: 1, missed: 1, completed: 0, }, }, ];Conozco el grupo y cuento las funciones agregadas, pero no puedo descubrir cómo implementar eso.
agregar
db.collection.aggregate([ { "$group": { "_id": { "created_at": "$created_at" }, "pending": { $sum: { "$cond": [ { "$eq": [ "$status", "pending" ] }, 1, 0 ] } }, "missed": { $sum: { "$cond": [ { "$eq": [ "$status", "missed" ] }, 1, 0 ] } }, "completed": { $sum: { "$cond": [ { "$eq": [ "$status", "completed" ] }, 1, 0 ] } }, } } ])