【发布时间】:2012-11-16 22:15:06
【问题描述】:
关于如何查询 MongoDB 的新手问题。我想把每天收到的多个对象汇总到一个单日记录中。文档结构最终将包含 365 天的数据(每年,可能每年有一个新文档),格式如下:
{
"2012": {
"9": {
"1": {
"attribute1": 42.1,
"attribute2": 5.895,
"attribute3": 2347,
"attribute...n": 33076.875,
"startFuel": [
32976.75,
33018.875,
33041.375
],
"startOdometer": [
202748.9,
202973,
203100.2
],
"endOdometer" : 209855.6
},
"10": {
"attribute1": 363.90000000000003,
"attribute2": 59.242000000000004,
"attribute3": 20284,
"attribute...n": 34335.375,
"startFuel": [
34161,
34214.125,
34245.25,
34280.875
],
"startOdometer": [
209855.6,
210166.4,
210348.2,
210555.7
],
"endOdometer" : 210655.7
}
}
},
"_id": ObjectId("50b6838a6ef6585a9e51f2af"),
"key1": null,
"keu2": -1,
"key3": 572755
}
如您所见,每个文档属于一个实体,一年包含每个月,每个月都有每一天(只要有当天/月/年的数据)。
我正在为如何查询此文档格式而苦苦挣扎。我想使用聚合框架来平均文档中的值(对于单个实体),并在同一时间段内将它们聚合到多个文档/实体中。
例如,我想找出 8 月份每天行驶的平均里程(对于每个实体,对于该月的每一天,从 endOdometer 中减去最低的 startOdometer 并平均该月的值)。 (顺便说一句:startOdometer 是一个数组,允许我在不预先查询文档以查看它是否已经存在的情况下推送值。
我们内部正在讨论是否需要使用 map/reduce 将所有聚合视图创建到我们的数据中,或者我们是否可以使用 map/reduce 创建每日摘要并使用聚合框架来提取数据一起。我想知道这个数据结构将如何支持这种类型的查询,或者其他什么数据结构可能更适合让我们利用聚合框架来汇总我们的数据。
【问题讨论】:
-
这样的动态模式很难查询。修改架构以使用固定键名并将动态内容留给值会更好。
-
您说“将它们汇总为一天的记录”,但您说该文档将包含一年的数据 - 您能澄清一下吗?
-
抱歉,在处理另一个问题之前我没有看到您的回复。当时的想法是,一份文档将包含长达数年的数据,并按天分解。
-
@JohnnyHK 更新作为答案,我会接受。谢谢...
标签: mongodb cassandra time-series data-modeling nosql