sách gpt4 ăn đã đi

Mongodb同时在多个字段上聚合(计数)

In lại Tác giả: IT Lão Cao 更新时间:2023-10-28 13:10:09 31 4
mua khóa gpt4 giày nike

我有如下文件:

{
"_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?

câu trả lời hay nhất

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.

Về việc tổng hợp (đếm) Mongodb trên nhiều trường cùng một lúc, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/25843255/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress