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)的主要内容,如果未能解决你的问题,请参考以下文章

在特定的多维 mongoDb 集合上推送对象

在 MongoDB 中使用大量集合

MongoDb 实时(或接近实时)流出插入的数据

MongoDB中的规范化对象和数组

将日期对象放入 MongoDB,使用 pymongo 查询时返回浮点数

优化将BigQuery的数据传输到MongoDB的气流任务