toplama çerçeve verilerine dayanarak tuşları oluşturmaz, ne hatta "veri" olarak bunu yaparken gerektiğini, anahtar ama aslında veri değil.
temelde sadece bunu yapabilirsiniz demektir
:
db.data.aggregate([
{ "$group": {
"_id": {
"event_type": "$event",
"day": { "$dayOfWeek": "$date" }
},
"count": { "$sum": 1 }
}}
])
Ve bu çıktıda birden belgelerde de olsa etkinlik başına haftanın, günde oluşumlarını saymak, ancak bu tek değiştirmek kolaydır Olay başına belge:
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" } }
}}
])
Ve bu bir dizi biçimindedir, ancak yine de istediğiniz sonuçları tutar.
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
]
}
}
}}
)
Ama bu gerçekten uzun böylece IMHO ben de onlar kadar birinci ya da belki ikinci solüsyon ile sadık kalacağına sarılır: o zaman böyle bir şey yapmak istiyorum tam formunu yapıyor gerçekten bükük varsa
okumak daha kısa ve daha kolaydır.
doh! Şimdi kolay görünüyor, ben her zaman _id içinde birden fazla alan yapışabilirim unutuyorum :(Teşekkür! – Unknown