MongoDB group by 后按数组日期排序
MongoDB Sort by array date after group by
我正在尝试在时间间隔内对订单数组进行分组,并按日期对它们进行分组,对它们进行排序,并将所有订单分成几天。但是,我也想对每天排序的订单数组进行排序。
Orders.aggregate([{
$match: {
'created_at': {
$gte: timeInterval, //match last 3 days
}
}
}, {
"$group": {
_id: {
$dateToString: { format: "%d/%m/%Y", date: "$created_at", timezone: "Australia/Melbourne" } // group by date
},
orders: { $push: '$$ROOT' }
}
}, {
$sort: { '_id': -1 } // sort by date
}])
const OrderSchema = new Schema({
...,
created_at: {
type: Date,
default: Date.now
},
})
exData=[{_id: 26/12/2021, orders:[...]},{_id: 25/12/2021, orders:[...]}, ]
// need to sort orders array
我试过:
{
$sort: { '_id': -1, "orders.created_at": -1 }
}
如有任何帮助,我将不胜感激。谢谢
您的聚合管道应如下所示:
$match
- 按条件过滤文档。
$sort
- 按 created_at
. 对文档进行排序
$group
- 按 created_at
分组并为累积字段添加 orders
。
Orders.aggregate([
{
$match: {
'created_at': {
$gte: timeInterval, //match last 3 days
}
}
},
{
$sort: { "created_at": -1 }
},
{
$group: {
_id: {
$dateToString: { format: "%d/%m/%Y", date: "$created_at", timezone: "Australia/Melbourne" } // group by date
},
orders: { $push: '$$ROOT' }
}
}
])
我正在尝试在时间间隔内对订单数组进行分组,并按日期对它们进行分组,对它们进行排序,并将所有订单分成几天。但是,我也想对每天排序的订单数组进行排序。
Orders.aggregate([{
$match: {
'created_at': {
$gte: timeInterval, //match last 3 days
}
}
}, {
"$group": {
_id: {
$dateToString: { format: "%d/%m/%Y", date: "$created_at", timezone: "Australia/Melbourne" } // group by date
},
orders: { $push: '$$ROOT' }
}
}, {
$sort: { '_id': -1 } // sort by date
}])
const OrderSchema = new Schema({
...,
created_at: {
type: Date,
default: Date.now
},
})
exData=[{_id: 26/12/2021, orders:[...]},{_id: 25/12/2021, orders:[...]}, ]
// need to sort orders array
我试过:
{
$sort: { '_id': -1, "orders.created_at": -1 }
}
如有任何帮助,我将不胜感激。谢谢
您的聚合管道应如下所示:
$match
- 按条件过滤文档。$sort
- 按created_at
. 对文档进行排序
$group
- 按created_at
分组并为累积字段添加orders
。
Orders.aggregate([
{
$match: {
'created_at': {
$gte: timeInterval, //match last 3 days
}
}
},
{
$sort: { "created_at": -1 }
},
{
$group: {
_id: {
$dateToString: { format: "%d/%m/%Y", date: "$created_at", timezone: "Australia/Melbourne" } // group by date
},
orders: { $push: '$$ROOT' }
}
}
])