【发布时间】:2017-08-06 15:39:44
【问题描述】:
我有一些时间序列数据存储在 Mongo 中,每个帐户一个文档,如下所示:
{
"account_number": 123,
"times": [
datetime(2017, 1, 2, 12, 34, 56),
datetime(2017, 3, 4, 17, 18, 19),
datetime(2017, 3, 11, 0, 1, 11),
]
"values": [
1,
10,
9001,
]
}
因此,要明确在上述表示帐户123 的值从2017-01-02 12:34:56 变为1,直到它在2017-03-04 17:18:19 上变为10,然后在2017-03-11, 00:01:11 上变为9001。
有许多帐户,每个帐户的数据都不同(可能在不同的时间,并且可能比其他帐户具有更多或更少的值变化)。
我想在给定时间查询每个用户的价值,例如"2017-01-30 02:03:04 的每个用户的价值是多少?将返回上述帐户的1,因为它在给定时间之前设置为1,并且直到给定时间之后才改变。
看起来$zip 会很有用,但这仅在 Mongo 3.4 中可用,我正在使用 3.2,并且没有计划很快升级。
编辑:
我可以使用以下方法到达那里的一小部分:
> db.account_data.aggregate([{$unwind: '$times'}, {$unwind: '$values'}])
返回类似:
{"account_number": 123, "times": datetime(2017, 1, 2, 12, 34, 56), "values": 1},
{"account_number": 123, "times": datetime(2017, 1, 2, 12, 34, 56), "values": 10},
#...
这不太正确,因为它返回时间/值的叉积
【问题讨论】:
-
更新架构是否适合您?如果您可以将它们作为嵌入数组中的键值对,它将对您有所帮助。
-
仅使用 MongDB 3.2 功能查看我的答案
标签: mongodb mongodb-query time-series