Я создал следующий запрос mon go ниже, где мне нужно сопоставить 3 разных результата, поэтому я использовал фасет, с которым я борюсь, это снова сгруппировать его после объединения в конце (также в стороне вопрос, есть ли лучший способ выполнить запрос ниже, отмечая, что я могу использовать только функции в Mon go 3.4):
Текущий результат выглядит следующим образом:
[1]
dataGrouped:
_id:
cap: CAP1
location: Somewhere
totalReviewedRequests : 1.0
[2]
dataGrouped:
_id:
cap: CAP2
location: Somewhere
totalReviewedRequests : 1.0
[3]
dataGrouped:
_id:
cap: CAP2
location: Somewhere else
totalReviewedRequests : 5.0
[4]
dataGrouped:
_id:
cap: CAP1
location: Somewhere
totalApprovedRequests : 1.0
[5]
dataGrouped:
_id:
cap: CAP1
location: Somewhere
totalRejectedRequests : 5.0
What I want для достижения:
cap: CAP1
location. totalReviewed. totalRejected. totalApproved
Somewhere. 1 5 1
cap: CAP2
location. totalReviewed. totalRejected. totalApproved
Somewhere. 1 0 0
Somewhere else. 5 0 0
db.events.aggregate([
{ "$facet": {
"TotalReviewed": [
{ $unwind: "$payload"},
{ "$match" : { eventType : "WORKFLOW_PROGRESSED" , "outcome" : {
$in: ["x", "y"]
}}},
{ "$group": {
"_id": {
"cap": "$payload.draft.id",
"location": "$payload.location"
},
"totalReviewedRequests": { "$sum": 1 }
}}],
"ApprovedRequests": [
{ $unwind: "$payload" },
{ "$match" : { eventType : "WORKFLOW_ENDED_APPROVED", "payload.request": { "$exists": true } }},
{ "$group": {
"_id": {
"cap": "$payload.approved.id",
"location": "$payload.location"
},
"totalApprovedRequests": { "$sum": 1 }
}}],
"RejectedRequests": [
{ $unwind: "$payload.draft" },
{ "$match" : { "outcome" : "y" }},
{ "$group": {
"_id": {
"cap": "$payload.draft.id",
"location": "$payload.location"
},
"totalRejectedRequests": { "$sum": 1 }
} }
]
}},
{ "$project": {
"dataGrouped": { "$concatArrays": ["$TotalReviewed", "$ApprovedRequests", "$RejectedRequests"] }
}},
{ "$unwind": "$dataGrouped" }
])