我有一个时间序列随着时间的推移而增长并且(可能)被修改:
关于“2013-01-01”:第一版数据
《2013-01-01》10
on "2013-01-02": 1月1日数据由10日修正为11日
《2013-01-01》11
on "2013-02-01": 2月1日第一版数据
"2013-01-01" 11
"2013-02-01" 20
on "2013-02-02": 2月1日数据由20日修正为21日
"2013-01-01" 11
"2013-02-01" 21
最常见的查询:
query1:获取所有日期的最新版本
"2013-01-01" 11
"2013-02-01" 21
query2:获取特定日期已知的时间序列:
例如,用“2013-02-01”查询,我需要得到
“2013-01-01”11
“2013-02-01”20
请注意,query1 与 query2 相同,但日期 = 当前日期
我需要帮助来构建我的文档,并且由于我来自关系背景,我不确定我的结构的含义。我基本上已经确定了 2 种可能的结构,并且很乐意收到一些反馈或其他结构的建议。
选项 A:每个版本都在一个单独的文档中
{
"id":"1",
"date":"2013-01-01",
"version_date":"2013-01-01",
"value":10
}
{
"id":"1",
"date":"2013-01-01",
"version_date":"2013-01-02",
"value":11
}
{
"id":"1",
"date":"2013-02-01",
"version_date":"2013-02-01",
"value":20
}
{
"id":"1",
"date":"2013-02-01",
"version_date":"2013-02-02",
"value":21
}
选项 B:一份文件包含一个日期的所有修订
{
"id":"1",
"date":"2013-01-01",
"values" : [
{ "version_date":"2013-01-01",
"value":10
},
{
"version_date":"2013-01-02",
"value":11
}
}
{
"id":"1",
"date":"2013-02-01",
"values" : [
{ "version_date":"2013-02-01",
"value":20
},
{
"version_date":"2013-02-02",
"value":21
}
}
在选项 B 中,我还担心执行更新查询可能会有点困难,因为文档有一个不断增长的部分,我不确定它是否被 mongodb 很好地支持/优化
编辑:我也在考虑使用选项 C 来加快 query1 的速度:(虽然它可能会减慢一点写作速度)
{
"id":"1",
"date":"2013-01-01",
"values" : [
{ "version_date":"2013-01-01",
"value":10
},
{
"version_date":"2013-01-02",
"value":11
}
"last_value":11
}
{
"id":"1",
"date":"2013-02-01",
"values" : [
{ "version_date":"2013-02-01",
"value":20
},
{
"version_date":"2013-02-02",
"value":21
}
"last_value":21
}