Khung tổng hợp sẽ không tạo ra các phím dựa trên dữ liệu, cũng không nên bạn thậm chí có thể làm như vậy là "dữ liệu" không phải là một chìa khóa nhưng thực tế dữ liệu, vì vậy bạn nên dính vào mô hình.
Điều đó có nghĩa bạn có thể về cơ bản chỉ làm điều này:
db.data.aggregate([
{ "$group": {
"_id": {
"event_type": "$event",
"day": { "$dayOfWeek": "$date" }
},
"count": { "$sum": 1 }
}}
])
Và đó sẽ đếm số lần xuất hiện mỗi ngày trong tuần cho mỗi sự kiện, mặc dù trong nhiều tài liệu trong đầu ra, nhưng điều này rất dễ dàng để chuyển sang một đơn tài liệu cho mỗi sự kiện:
db.data.aggregate([
{ "$group": {
"_id": {
"event_type": "$event",
"day": { "$dayOfWeek": "$date" }
},
"count": { "$sum": 1 }
}},
{ "$group": {
"_id": "$_id.event_type",
"days": { "$push": { "day": "$day", "count": "$count" } }
}}
])
Và tài liệu đó ở dạng mảng, nhưng nó vẫn giữ kết quả bạn muốn.
Nếu bạn đang thực sự thiên lệch về làm hình thức chính xác của bạn sau đó bạn muốn làm một cái gì đó như thế này:
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
]
}
}
}}
)
Nhưng đó là thực sự dài hơi để IMHO tôi sẽ gắn bó với giải pháp đầu tiên hoặc có thể thứ hai khi họ ngắn hơn và dễ đọc hơn.
doh! nó có vẻ dễ dàng bây giờ, tôi luôn luôn quên rằng tôi có thể dính nhiều lĩnh vực trong _id: (Cảm ơn! – Unknown