【发布时间】:2023-03-07 12:41:01
【问题描述】:
我正在使用 MongoDB 来存储时间序列数据,其结构与此处解释的“面向文档的设计”类似:http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in-mongodb
目标是查询整个系统一天中最繁忙的 10 分钟。每个文档使用 60 个子文档(每分钟 1 个)存储 1 小时的数据。每分钟存储嵌入在“vals”字段中的各种指标。我关心的指标是“订单”。示例文档如下所示:
{
"_id" : ObjectId("54d023802b1815b6ef7162a4"),
"user" : "testUser",
"hour" : ISODate("2015-01-09T13:00:00Z"),
"vals" : {
"0" : {
"orders" : 11,
"anotherMetric": 15
},
"1" : {
"orders" : 12,
"anotherMetric": 20
},
.
.
.
}
}
请注意,系统中有很多用户。
我已经设法通过使用以下组对象进行聚合来(在某种程度上)扁平化结构:
group = {
$group: {
_id: {
hour: "$hour"
},
0: {$sum: "$vals.0.orders"},
1: {$sum: "$vals.1.orders"},
2: {$sum: "$vals.2.orders"},
.
.
.
}
}
但这只会给我 24 个文档(每小时 1 个)以及该小时内每分钟的订单数,如下所示:
{
"_id" : {
"hour" : ISODate("2015-01-20T14:00:00Z")
},
"0" : 282086,
"1" : 239358,
"2" : 289188,
.
.
.
}
现在我需要以某种方式从中获得一天中前 10 分钟的时间,但我不确定如何。我怀疑它可以用 $project 完成,但我不确定如何。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework