【问题标题】:MongoDB Aggregation framework and windowing operations over time series dataMongoDB 聚合框架和时间序列数据的窗口操作
【发布时间】:2020-07-20 07:27:31
【问题描述】:

我无法在 MongoDB 聚合框架中找到有关时间序列数据的窗口操作的信息。

它是否支持时间序列数据的窗口操作?例如,我需要根据每 5 分钟窗口的文档时间戳计算一些聚合值,并将这些聚合存储在单独的文档中以供功能使用。 MongoDB Aggregation 框架是否可以在 MongoDB Aggregation 框架管道和阶段的帮助下实现这一目标?

【问题讨论】:

标签: mongodb aggregation-framework


【解决方案1】:

您可以使用以下方法将它们分组在 5 分钟的窗口中,然后运行聚合:

db.users.aggregate([
  { "$group": {
    "_id": {
      "$toDate": {
        "$subtract": [
          { "$toLong": "$signedUp" },
          { "$mod": [ { "$toLong": "$signedUp" }, 1000 * 60 * 5 ] }
        ]
      }
    },
    "count": { "$sum": 1 }
  }}
])

上面的例子统计了每 5 分钟有多少用户注册。

示例取自here

【讨论】:

  • 感谢您的回答!如果我错了,请纠正我,但看起来这种解决方案将在查询执行期间而不是在文档插入期间实时工作?如果是这样,该解决方案在每个窗口中的大量文档上的性能如何?
  • 所以,换句话说 - 我对 INSERT/UPDATE 上的聚合感兴趣,而不是 SELECT 上的聚合
  • 这是实时的。但是你可以通过几种方式来改进它;支持带索引的查询,以定义的间隔运行并使用$merge 输出到不同的集合,在原始集合上附加更改流并在每次插入/更新时预先聚合
  • 谢谢。当您谈论 change streams on raw collection and pre-aggregate 时 - 您是在谈论基于 MongoDB 功能的解决方案,或者我应该使用 3rdparty 工具/框架以便在 MongoDB 之外完成这项工作?
  • MongoDB 原生支持更改流,但在应用范围内编写,即您编写代码(为订阅者)。所以,不是第 3 方,而是外部数据库服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2015-10-11
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多