【问题标题】:How to create Time Series Collection with Mongoose如何使用 Mongoose 创建时间序列集合
【发布时间】:2022-03-15 11:55:30
【问题描述】:

MongoDB v5.0 引入了一种新的集合类型,该集合类型针对存储和使用时间序列数据进行了优化 - Time Series Collections。我们如何使用 Mongoose 创建时间序列集合?

【问题讨论】:

    标签: mongodb mongoose time-series


    【解决方案1】:

    在定义 Schema 时,可以通过额外的 timeseries 配置属性来完成。

    const schema = Schema(
      { 
        property_1: String,
        property_2: String,
        timestamp_property: Date, 
        metadata_property: Object,
      {
        timeseries: {
          timeField: 'timestamp_property',
          metaField: 'metadata_property',
          granularity: 'hours',
        },
      }
    );
    
    • timeField 是必需的。它是每个时间序列文档中包含日期的字段的名称。

    • metaField 是可选的。它是每个时间序列文档中包含元数据的字段的名称。指定字段中的元数据应该是用于标记一系列唯一文档的数据。元数据应该很少(如果有的话)改变。

    • granularity 是可选的。可能的值为“”、“分钟”和“小时”。默认情况下,MongoDB 将粒度设置为“”以进行高频摄取。手动设置粒度参数,通过优化时间序列集合中的数据在内部存储的方式来提高性能。要选择粒度值,请选择与连续传入测量之间的时间跨度最接近的匹配项。


    示例

    假设您想要存储每小时的温度记录。在这种情况下,您可以通过以下方式定义您的架构:

    onst schema = Schema(
      {
        temperature: Number,
        calculated_at: Date,
        metadata: {
          sensorId: String,
          location: String,
        },
      },
      {
        timeseries: {
          timeField: 'calculated_at',
          metaField: 'metadata',
          granularity: 'hours',
        },
      }
    );
    

    【讨论】:

    • “name”字段是mongo中时序集合的名称吗?
    • 嗨,埃里克,不是。它只是模式模型中的一些属性。让我将其更改为更通用的字段名称。
    • 我注意到在他们正在执行“insertMany”的示例中,作者输入了一个不在元数据中的“temp”字段。
    • 是的,会的。当我自己检查这个新的时间序列集合时,我很快就回答了。我同意答案可以更详细并包括一个例子。 :D
    • 是的,如果你添加这样的东西,据我所知,这将是互联网上唯一存在的东西,因为 Mongoose 文档本身含糊不清,因为我之前读过来这里。
    猜你喜欢
    • 2013-02-24
    • 2022-10-14
    • 2021-05-29
    • 2016-10-21
    • 2021-12-19
    • 2014-04-23
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多