我有大约30,000个示例,每个示例都有一个给定的时间戳和大陆。
我想运行一个查询,按月对数据进行分组,返回每个定义的大洲(例如“欧洲”,“亚洲”)每月的示例计数,然后计算每个大洲的累积计数。
该查询是针对Grafana Jmeter 板的,因此它需要是一个聚合操作。
目前,我的查询返回给定行的大陆计数,而不是该行和前面几行的累积计数。
例如,如果欧洲在时间“2020-02-01 0:00:00”为“10”,则cumulativeCount也将为“10”,而不管之前发生了什么。
查询:
targets.targets.aggregate([
{
$match: {
"status.isError": false,
}
},
{
$group: {
_id: {
$dateToString: {
format: "%Y-%m-01T00:00:00.000Z", date: { $toDate: "$date_posted" }
}
},
Europe: {
$sum: {
$cond: [
{ $eq: ["$continent", "Europe"] },
1,
0
]
}
}
}
},
{
$project: {
_id: 1,
Europe: 1
}
},
{
$sort: {
"_id": 1
}
},
{
$addFields: {
time: { $dateFromString: { dateString: "$_id" } }
}
},
{
$project: {
_id: 1,
time: 1,
Europe: 1
}
},
{
$setWindowFields: {
partitionBy: "$time",
sortBy: { "time": 1 },
output: {
cumulativeCount: {
$sum: "$Europe"
}
}
}
}
])
如果我在分组之前尝试$setWindowFields,查询将出错,因为排序超出了内存限制。
1条答案
按热度按时间pkwftd7m1#
试试这样的方法:
了解它在playground example上的工作原理