我使用了以下链接中建议的架构: https://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/
以下是示例文档。键每小时延长0到23小时,0到59分钟。由于预分配的可能性,某些密钥可能会丢失。
{
"page": "abc",
"minute": {
"0": {
"0": 1,
"1": 2,
"2": 4,
"3": 1,
"4": 6
},
"1": {
"0": 2,
"1": 4,
"2": 1,
"3": 3,
"4": 0
},
"2": {
"0": 1,
"1": 2,
"2": 2,
"3": 1,
"4": 50
},
"3": {
"0": 6,
"1": 0,
"2": 0,
"3": 0,
"4": 1
}
}
}
我想计算从每分钟2.30到分钟3.3的访问总和。
答案 0 :(得分:0)
我可以使用聚合框架的“$ project”阶段来完成它。我使用“$ add”和“$ ifNull”运算符的组合。运算符“$ ifNull”用于处理文档中不存在子文档的键的场景。
{
"$project": {
"_id": 0,
"page": 1,
"number": {
"$add": [
{ "$ifNull": [ "$minute.2.30", 0 ] },
{ "$ifNull": [ "$minute.2.31", 0 ] },
{ "$ifNull": [ "$minute.2.32", 0 ] },
{ "$ifNull": [ "$minute.2.33", 0 ] },
{ "$ifNull": [ "$minute.2.34", 0 ] },
{ "$ifNull": [ "$minute.2.35", 0 ] },
{ "$ifNull": [ "$minute.2.36", 0 ] },
{ "$ifNull": [ "$minute.2.37", 0 ] },
{ "$ifNull": [ "$minute.2.38", 0 ] },
{ "$ifNull": [ "$minute.2.39", 0 ] },
{ "$ifNull": [ "$minute.2.40", 0 ] },
{ "$ifNull": [ "$minute.2.41", 0 ] },
{ "$ifNull": [ "$minute.2.42", 0 ] },
{ "$ifNull": [ "$minute.2.43", 0 ] },
{ "$ifNull": [ "$minute.2.44", 0 ] },
{ "$ifNull": [ "$minute.2.45", 0 ] },
{ "$ifNull": [ "$minute.2.46", 0 ] },
{ "$ifNull": [ "$minute.2.47", 0 ] },
{ "$ifNull": [ "$minute.2.48", 0 ] },
{ "$ifNull": [ "$minute.2.49", 0 ] },
{ "$ifNull": [ "$minute.2.50", 0 ] },
{ "$ifNull": [ "$minute.2.51", 0 ] },
{ "$ifNull": [ "$minute.2.52", 0 ] },
{ "$ifNull": [ "$minute.2.53", 0 ] },
{ "$ifNull": [ "$minute.2.54", 0 ] },
{ "$ifNull": [ "$minute.2.55", 0 ] },
{ "$ifNull": [ "$minute.2.56", 0 ] },
{ "$ifNull": [ "$minute.2.57", 0 ] },
{ "$ifNull": [ "$minute.2.58", 0 ] },
{ "$ifNull": [ "$minute.2.59", 0 ] },
{ "$ifNull": [ "$minute.3.0", 0 ] },
{ "$ifNull": [ "$minute.3.1", 0 ] },
{ "$ifNull": [ "$minute.3.2", 0 ] },
{ "$ifNull": [ "$minute.3.3", 0 ] },
{ "$ifNull": [ "$minute.3.4", 0 ] },
{ "$ifNull": [ "$minute.3.5", 0 ] },
{ "$ifNull": [ "$minute.3.6", 0 ] },
{ "$ifNull": [ "$minute.3.7", 0 ] },
{ "$ifNull": [ "$minute.3.8", 0 ] },
{ "$ifNull": [ "$minute.3.9", 0 ] },
{ "$ifNull": [ "$minute.3.10", 0 ] },
{ "$ifNull": [ "$minute.3.11", 0 ] },
{ "$ifNull": [ "$minute.3.12", 0 ] },
{ "$ifNull": [ "$minute.3.13", 0 ] },
{ "$ifNull": [ "$minute.3.14", 0 ] },
{ "$ifNull": [ "$minute.3.15", 0 ] }
]
}
}
}