एकत्रीकरण ढांचा डेटा के आधार पर कुंजी नहीं बनाएगा, न ही चाहिए आप ऐसा इसलिए भी कर रहे हैं क्योंकि "डेटा" एक कुंजी नहीं बल्कि वास्तव में डेटा है, इसलिए आपको पैटर्न से चिपके रहना चाहिए।
इसका मतलब है कि आप मूल रूप से ऐसा कर सकते हैं:
db.data.aggregate([
{ "$group": {
"_id": {
"event_type": "$event",
"day": { "$dayOfWeek": "$date" }
},
"count": { "$sum": 1 }
}}
])
और वह प्रति घटना सप्ताह के प्रति दिन की घटनाओं की गणना करेगा, हालांकि आउटपुट में कई दस्तावेज़ों में, लेकिन प्रति ईवेंट एकल दस्तावेज़ में बदलना आसान है:
db.data.aggregate([
{ "$group": {
"_id": {
"event_type": "$event",
"day": { "$dayOfWeek": "$date" }
},
"count": { "$sum": 1 }
}},
{ "$group": {
"_id": "$_id.event_type",
"days": { "$push": { "day": "$_id.day", "count": "$count" } }
}}
])
और यह एक सरणी रूप में है, लेकिन यह अभी भी आपके इच्छित परिणाम रखता है।
यदि आप वास्तव में अपना सटीक रूप करने पर तुले हुए हैं तो आप कुछ ऐसा करना चाहते हैं:
db.data.aggregate([
{ "$group": {
"_id": "$event",
"1": {
"$sum": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 1 ] },
1,
0
]
}
},
"2": {
"$sum": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 2 ] },
1,
0
]
}
},
"3": {
"$sum": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 3 ] },
1,
0
]
}
},
"4": {
"$sum": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 4 ] },
1,
0
]
}
},
"5": {
"$sum": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 5 ] },
1,
0
]
}
},
"6": {
"$sum": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 6 ] },
1,
0
]
}
},
"7": {
"$sum": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 7 ] },
1,
0
]
}
}
}}
)
लेकिन यह वास्तव में लंबा घुमावदार है इसलिए आईएमएचओ मैं पहले या शायद दूसरे समाधान के साथ रहूंगा क्योंकि वे छोटे और पढ़ने में अधिक आसान हैं।