我正在尝试在mongodb中设置一个时间序列(使用this作为指导)。假设我有一个集合,其中每个文档如下所示:
{
_id: '...',
timestamp_minute: '2018-01-01T12:30:00.000Z',
numbers: [[1, 2, ..., 10], ..., [1, 2, ..., 10]],
letters: [[a, b, ..., j], ..., [a, b, ..., j]]
}
我如何展开它,使其看起来像这样:
[
{_id: '...', timestamp_minute: '2018-01-01T12:30:00.000Z', values: 1, letters: a},
{_id: '...', timestamp_minute: '2018-01-01T12:30:00.000Z', values: 2, letters: b},
{_id: '...', timestamp_minute: '2018-01-01T12:30:00.000Z', values: 3, letters: c},
...
]
数据每分钟存储一次,精度为十分之一秒。这意味着第一级值通常为长度60(一分钟内的秒数),而每个嵌套的值都是长度10(一秒的十分之一秒)。
我希望能够对其进行扩展以便生成汇总数据。
答案 0 :(得分:1)
您可以尝试在3.4版及更高版本中进行以下汇总。
db.colname.aggregate([
{"$project":{
"timestamp_minute":1,
"numbersandletters":{
"$map":{
"input":{"$range":[0,{"$size":"$numbers"}]},
"as":"ix",
"in":{
"$zip":{
"inputs":[
{"$arrayElemAt":["$numbers","$$ix"]},
{"$arrayElemAt":["$letters","$$ix"]}
]
}
}
}
}
}},
{"$unwind":"$numbersandletters"},
{"$unwind":"$numbersandletters"},
{"$project":{
"timestamp_minute":1,
"values":{"$arrayElemAt":["$numbersandletters",0]},
"letters":{"$arrayElemAt":["$numbersandletters",1]}
}}
])