Soy nuevo en MongoDB, quiero obtener datos en secciones de la matriz.
{ "name":"User name", "messages":[ { "message":"Message 1", "date":"2022-05-12T00:00:00.000Z" }, { "message":"Message 2", "date":"2022-05-12T00:00:00.000Z" }, { "message":"Message 3", "date":"2022-05-13T00:00:00.000Z" }, { "message":"Message 4", "date":"2022-05-13T00:00:00.000Z" }, { "message":"Message 5", "date":"2022-05-13T00:00:00.000Z" } ] }Los resultados que quiero son
[ { "date":"2022-05-12T00:00:00.000Z", "messages":[ { "message":"Message 1", "date":"2022-05-12T00:00:00.000Z" }, { "message":"Message 2", "date":"2022-05-12T00:00:00.000Z" } ] }, { "date":"2022-05-13T00:00:00.000Z", "messages":[ { "message":"Message 3", "date":"2022-05-13T00:00:00.000Z" }, { "message":"Message 4", "date":"2022-05-13T00:00:00.000Z" }, { "message":"Message 5", "date":"2022-05-13T00:00:00.000Z" } ] } ]No estoy familiarizado con la agregación de MongoDB, he analizado muchas preguntas sobre el desbordamiento de la pila, pero no encontré ninguna que me ayudara.
¿Es posible hacer esto? Si es así, cualquier ayuda sería muy apreciada. :)
$unwind : deconstruye la matriz de messages en varios documentos.$group : agrupa por messages.date . fecha y agrega el documento de messages a la matriz de messages .$project - Decorar documentos de salida. db.collection.aggregate([ { $unwind: "$messages" }, { $group: { _id: "$messages.date", messages: { $push: "$messages" } } }, { $project: { _id: 0, date: "$_id", messages: 1 } } ])Puede usar la agregación para obtener el resultado deseado.
db.collection.aggregate([ { $unwind: "$messages" }, { $group: { _id: "$messages.date", messages: { $push: "$messages" } } }, { $project: { _id: 0, date: "$_id", messages: 1 } } ])