Javascript 如何在mongoDB中使用聚合对对象数组进行排序
如何使用聚合对dueDate进行排序Javascript 如何在mongoDB中使用聚合对对象数组进行排序,javascript,node.js,database,mongodb,mongoose,Javascript,Node.js,Database,Mongodb,Mongoose,如何使用聚合对dueDate进行排序 todos: [ { task: { type: String, trim: true, required: 'Please Enter your Task', }, dueDate: Date, dueTime: String, }, ], 我试过这些东西,但没用 db.server.aggregate
todos: [
{
task: {
type: String,
trim: true,
required: 'Please Enter your Task',
},
dueDate: Date,
dueTime: String,
},
],
我试过这些东西,但没用
db.server.aggregate(
{ $unwind: '$todos' },
{ $sort: { 'todos.dueDate': -1 } },
{ $group: { _id: '$_id', todos: { $push: '$todos' } } },
{ $project: { 'todos.dueDate': '$dueDate' } }
);
及
我无法理解我在聚合中做错了什么
示例:-
样本输入
{
_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'
}
{
_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'
}
样本输出
{
_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'
}
{
_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'
}
如果您的目标是将任务元素按其
dueDate
分成不同的组,然后对这些组进行排序,那么您可以执行以下操作:
db.collection.aggregate([
{
"$unwind": "$todos"
},
{
$group: {
_id: "$todos.dueDate",
todos: {
$push: "$$ROOT"
}
}
},
{
$sort: {
"_id": -1
}
},
])
以下是mongoplayground上的一个工作示例:
OP编辑了问题并澄清了导出结果后,可简化为:
db.collection.aggregate([
{
"$unwind": "$todos"
},
{
$sort: {
"todos.dueDate": 1
}
}
])
Mongoplayground:那么你不想按日期分组吗?不,我只想让它返回排序后的
dueDate
日期以这种格式存储2021年3月9日星期二00:00:00 GMT+0530(印度标准时间)
我尝试了这个方法,但没有任何更改请参见编辑。。请注意,您应该始终在问题中包含预期的结果,以便更容易地帮助您。我不知道为什么,但它现在仍然运行良好,它在mongoplayground上按预期运行,对吗?或者这不是你想要的?是的,它在mongoplayground上工作,但在我的项目中不起作用:(