[ { _id: 1, title: "Task 1", assignedTo: ["userId1", "userId2", "userId3"] status: "To do" }, { _id: 2, title: "Task 2", assignedTo: ["userId1", "userId2"], status: "In progress" }, { _id: 3, title: "Task 3", assignedTo: ["userId3"], status: "Completed" } ]Quiero usar el agregado MongoDB para devolver todas las tareas asignadas a un usuario y agruparlas por estado. Por ejemplo, la entrada es: userId: "userId1" y el resultado esperado debería ser algo como esto:
{ results: [ { status: "To do", tasks: [ { _id: 1, title: "Task 1", assignedTo: ["userId1", "userId2", "userId3"] } ] }, { status: "In progress", tasks: [ { _id: 2, title: "Task 2", assignedTo: ["userId1", "userId2"] } ] }, { status: "Completed", tasks: [] }, ] }puede agrupar por status y enviar elementos si coincide con el ID de userId1
puedes probarlo aquí parque infantil mongodb
db.collection.aggregate([ { "$group": { "_id": { status: "$status" }, tasks: { "$push": { $cond: [ { "$in": [ "userId1", "$assignedTo" ] }, { _id: "$_id", title: "$title", assignedTo: "$assignedTo" }, "$$REMOVE" ] } } } }, { "$project": { status: "$_id.status", tasks: 1, _id: 0 } } ])