[英]How to sort Arrays of Object using aggregation in mongoDB
如何使用聚合对dueDate
进行排序?
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' } }
);
和
db.server.aggregate(
{ $unwind: '$todos' },
{ $sort: { 'todos.dueDate': -1 } },
{ $group: { "_id": "$_id", todos: { $push: '$todos' } } },
);
我无法理解我在聚合中做错了什么。
例子:-
样本输入
{
_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'
}
样品 Output
{
_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
日期将任务元素group
到单独的组中,然后对这些组进行排序,那么您可以执行以下操作:
db.collection.aggregate([
{
"$unwind": "$todos"
},
{
$group: {
_id: "$todos.dueDate",
todos: {
$push: "$$ROOT"
}
}
},
{
$sort: {
"_id": -1
}
},
])
这是 mongoplayground 上的一个工作示例: https://mongoplayground.net/p/n3cfrLvR2WM
在OP编辑了问题并澄清了预期的结果之后,这可以简化为:
db.collection.aggregate([
{
"$unwind": "$todos"
},
{
$sort: {
"todos.dueDate": 1
}
}
])
Mongoplayground: https://mongoplayground.net/p/YVCAiXrJJPv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.