mongodb - 时间序列集合(time series collection)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb - 时间序列集合(time series collection)相关的知识,希望对你有一定的参考价值。
参考技术A 在mongodb 5.0 版本新增的功能,它有效地存储了一段时期内的测量序列。时间序列数据是随着时间收集的任何类型的数据,并由一个或多个不变参数唯一标识, 这些不变参数通常又称为是数据源的元数据示例:
与普通集合相比,将时序数据存储在时序集合中提高了查询效率,减少了时序数据和次级索引(secondary index)的磁盘存储空间。
时间序列集合的特性类似于普通集合。您可以像往常一样插入和查询数据。 MongoDB 将时间序列集合视为内部集合的可写非物化视图,在插入时自动将时间序列数据组织成优化的存储格式。 当您查询时间序列集合时,您每次测量操作一个文档。对时间序列集合的查询利用优化的内部存储格式并更快地返回结果。
创建时间序列集合时,可以使用 expireAfterSeconds 参数设置自动删除过期的文档:
过期阈值是 timeField 字段值加上设定的过期秒数
例如 weather24h集合中有如下的文档
那该文档将在ISODate("2021-05-18T10:00:00.000Z") + 86400s 的时间过期
MongoDB中的规范化对象和数组
【中文标题】MongoDB中的规范化对象和数组【英文标题】:Normalized Object and array in MongoDB 【发布时间】:2021-05-31 04:46:51 【问题描述】:[
"data":
"id": "123",
"name": "delta1"
,
"property_data": [
"ser_name": "Insights",
"ser_value": "10000"
,
"ser_name": "plans",
"ser_value": "50000"
]
]
解释:property_data
是一个数组。 data
是一个对象。需要将 Array 转换为对象,但问题是如果我在 property_data
上执行 $unwind
,我会得到多次 data
对象,而我只需要一次。我想将我的数据结构转换为多个文档,但 data
不应该一次又一次地重复
预期输出
[
"property_data":
"id": "123",
"name": "delta1"
,
"property_data":
"ser_name": "Insights",
"ser_value": "10000"
,
"property_data":
"ser_name": "plans",
"ser_value": "50000"
,
]
【问题讨论】:
【参考方案1】:这可以通过一些基本的结构操作来实现,如下所示:
db.collection.aggregate([
$project:
property_data:
"$concatArrays": [
"$property_data",
[
"$data"
]
]
,
$unwind: "$property_data"
,
$replaceRoot:
newRoot:
property_data: "$property_data"
])
Mongo Playground
【讨论】:
以上是关于mongodb - 时间序列集合(time series collection)的主要内容,如果未能解决你的问题,请参考以下文章