Я пытаюсь разделить некоторые документы в соответствии с предыдущими 6 месяцами, а затем вычислить условную сумму определенных полей, которые удовлетворяют определенным условиям. Проблема в том, что я не вижу способа сделать это менее многословно. Я в основном ищу способ итерации в течение предыдущих 6 месяцев, а затем получить условную сумму поля.
Ниже я сделал следующее:
[
{
'$facet': {
'JanuaryTotal': [
{
'$match': {
'bookingDate': {
'$gte': ISODate('2020-01-01T00:00:00.000Z'),
'$lt': ISODate('2020-02-01T00:00:00.000Z')
}
}
}, {
'$project': {
'_id': 0,
'approved': {
'$cond': [
{
'$eq': [
'$approvalStatus', 'approved'
]
}, '$cost', 0
]
},
'pending': {
'$cond': [
{
'$eq': [
'$approvalStatus', 'pending'
]
}, '$cost', 0
]
},
'denied': {
'$cond': [
{
'$eq': [
'$approvalStatus', 'denied'
]
}, '$cost', 0
]
}
}
}, {
'$group': {
'_id': null,
'sumApproved': {
'$sum': '$approved'
},
'summPending': {
'$sum': '$pending'
},
'sumDenied': {
'$sum': '$denied'
}
}
}
]
}
}
]
Образец документа:
{
"_id":"5e45b621da68610f13aa0cba",
"type":"international",
"booking":"2222222",
"bookingId":"22222222",
"chatId":"Q22222222",
"approvalStatus":"approved",
"pax": "2",
"cost":"222",
"charged":"222",
"chargedGCT": "222.22",
"commRate": "2",
"commUSD":"22.22",
"commJMD":"2222.02",
"bookingDate": ISODate('2020-02-01T18:00:55.000+00:00),
"tourDate": ISODate('2020-02-03T18:00:55.000+00:00'),
"clientName":"test",
"agent":{
"agentName":"test",
"agentId":{
"$numberInt":"1"
}
}
}
Есть ли способ сделать итерацию за предыдущие 6 месяцев более кратким способом?