¿Cómo puedo ordenar la fecha de dueDate usando el agregado?
todos: [ { task: { type: String, trim: true, required: 'Please Enter your Task', }, dueDate: Date, dueTime: String, }, ],Intenté estas cosas pero no funcionó.
db.server.aggregate( { $unwind: '$todos' }, { $sort: { 'todos.dueDate': -1 } }, { $group: { _id: '$_id', todos: { $push: '$todos' } } }, { $project: { 'todos.dueDate': '$dueDate' } } );Y
db.server.aggregate( { $unwind: '$todos' }, { $sort: { 'todos.dueDate': -1 } }, { $group: { "_id": "$_id", todos: { $push: '$todos' } } }, );No soy capaz de entender lo que estoy haciendo mal en la agregación.
Ejemplo:-
Entrada de muestra
{ _id: 603ba275cc571e2404e0dd1b, task: 'task 1', dueDate: 2021-02-27T18:30:00.000Z, dueTime: '' },{ _id: 603ba285cc571e2404e0dd1c, task: 'task 2', dueDate: 2021-03-30T18:30:00.000Z, dueTime: '07:32 PM' },{ _id: 603ba290cc571e2404e0dd1d, task: 'task 3', dueDate: 2021-03-08T18:30:00.000Z, dueTime: '07:32 PM' },{ _id: 603ba3a7fea412537c295056, task: 'task4', dueDate: 2021-03-01T18:30:00.000Z, dueTime: '07:37 PM' }Salida de muestra
{ _id: 603ba275cc571e2404e0dd1b, task: 'task 1', dueDate: 2021-02-27T18:30:00.000Z, dueTime: '' },{ _id: 603ba3a7fea412537c295056, task: 'task4', dueDate: 2021-03-01T18:30:00.000Z, dueTime: '07:37 PM' },{ _id: 603ba290cc571e2404e0dd1d, task: 'task 3', dueDate: 2021-03-08T18:30:00.000Z, dueTime: '07:32 PM' },{ _id: 603ba285cc571e2404e0dd1c, task: 'task 2', dueDate: 2021-03-30T18:30:00.000Z, dueTime: '07:32 PM' }Si su objetivo es group los elementos de las tareas en grupos separados por fecha de dueDate y luego ordenar esos grupos, esto es lo que puede hacer:
db.collection.aggregate([ { "$unwind": "$todos" }, { $group: { _id: "$todos.dueDate", todos: { $push: "$$ROOT" } } }, { $sort: { "_id": -1 } }, ])Aquí hay un ejemplo de trabajo en mongoplayground: https://mongoplayground.net/p/n3cfrLvR2WM
Después de que OP editó la pregunta y aclaró cuál es el resultado esperado, esto se puede simplificar a:
db.collection.aggregate([ { "$unwind": "$todos" }, { $sort: { "todos.dueDate": 1 } } ])Zona de juegos Mongo: https://mongoplayground.net/p/YVCAiXrJJPv