Я создал эту агрегатную операцию, чтобы возвращать список заказов на каждый месяц. То есть, что-то вроде этого:
month1: [orders],
month2: [orders],
...
Однако я хотел, чтобы это было отсортировано с самого последнего до наименее последнего месяца. Вы можете видеть, что моя группа - месяц объединения + год с уловом. Если бы я просто сделал месяц + год, то сортировка не работала бы:
MYYYY
12020
22020
...
92020
102020
, как вы можете видеть, когда мы достигнем месяца 10, заказ нарушается. Уловка состояла в том, чтобы добавлять 10
к каждому месяцу, поэтому мы получаем
MYYYY
112020
122020
...
192020
202020
212020
222020
102021
, для которого порядок работает, но затем перерывы на следующий год, 2021.
Так как можно Я заказываю по месяцам и годам так, чтобы их можно было сортировать, но так, чтобы я также мог красиво отображать вещи в ответе? Что-то легко разобрать.
r = await Order.aggregate([
{
$match: {
launchDate: { "$gte": new Date(req.query.minDate), "$lte": new Date(req.query.maxDate) },
withdrawer: { $regex: utils.diacriticSensitiveRegex(req.query.withdrawer), $options: 'i' },
deleted: false
}
},
{
$sort: {
launchDate: 1
}
},
{
$group: {
_id: {
$concat: [
{
$toString: {
$year: "$launchDate"
}
},
{
$toString: {
$add: [{ $month: "$launchDate" }, 10]
}
}
]
},
withdraws: {
$push: "$$ROOT"
}
}
},
{
$sort: {
_id: -1
}
},
{
$addFields: {
dateRange: "$_id"
}
},
{
$skip: skip
},
{
$limit: perPage
}
]);