我有如下文件:
{
"_id" : "someuniqueeventid",
"event" : "event_type_1",
"date" : ISODate("2014-01-14T00:00:00Z"),
}
我想按“sự kiện
”分组并计算一周中每一天发生的每种事件类型的数量。基本上,我想得到类似的东西:
{
"_id": "event_type_1",
"1": "number of event_type_1 for Monday",
"2": "number of event_type_1 for Tuesday",
...
},
{
"_id": "event_type_2",
...
}
不幸的是,我被困在:
db.data.aggregate([ {$project: {ngày_của_tuần: {$dayOfWeek: "$date"}, sự kiện: "$event"}},
{$group: {_id: "$event", .... } ])
Có ý tưởng gì không?
Khung tổng hợp không tạo khóa dựa trên dữ liệu,không nênBạn thậm chí nên làm điều này vì "dữ liệu" không phải là khóa mà là dữ liệu, vì vậy bạn nên tuân theo mẫu này.
Điều này có nghĩa là về cơ bản bạn có thể làm:
db.data.aggregate([
{ "$nhóm": {
"_nhận dạng": {
"kiểu_sự_kiện": "$sự_kiện",
"ngày": { "$dayOfWeek": "$date" }
},
"đếm": { "$tổng": 1 }
}}
])
Điều này sẽ đếm số lần xuất hiện của mỗi sự kiện cho mỗi ngày trong tuần, mặc dù có nhiều tài liệu ở đầu ra nhưng điều này có thể dễ dàng thay đổi thành một tài liệu duy nhất cho mỗi sự kiện:
db.data.aggregate([
{ "$nhóm": {
"_nhận dạng": {
"kiểu_sự_kiện": "$sự_kiện",
"ngày": { "$dayOfWeek": "$date" }
},
"đếm": { "$tổng": 1 }
}},
{ "$nhóm": {
"_id": "$_id.kiểu_sự_kiện",
"ngày": { "$push": { "ngày": "$_id.day", "count": "$count" } }
}}
])
Đây là dạng mảng nhưng vẫn chứa kết quả bạn muốn.
Nếu bạn thực sự quyết tâm thực hiện biểu mẫu chính xác của mình thì bạn muốn làm điều gì đó như thế này:
db.data.aggregate([
{ "$nhóm": {
"_id": "$sự kiện",
"1": {
"$tổng": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 1 ] },
1,
0
]
}
},
"2": {
"$tổng": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 2 ] },
1,
0
]
}
},
"3": {
"$tổng": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 3 ] },
1,
0
]
}
},
"4": {
"$tổng": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 4 ] },
1,
0
]
}
},
"5": {
"$tổng": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 5 ] },
1,
0
]
}
},
"6": {
"$tổng": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 6 ] },
1,
0
]
}
},
"7": {
"$tổng": {
"$cond": [
{ "$eq": [{ "$dayOfWeek": "$date" }, 7 ] },
1,
0
]
}
}
}}
)
Nhưng điều này thực sự dài dòng, vì vậy IMHO tôi sẽ sử dụng giải pháp thứ nhất hoặc thứ hai vì chúng ngắn hơn và dễ đọc hơn.
Tôi là một lập trình viên xuất sắc, rất giỏi!