时间序列数据
概述
在这份指南中,您可以了解如何使用PyMongo存储和操作时间序列数据。
时间序列数据由以下组件组成
测量量
测量时间的戳记
描述测量的元数据
以下表格描述了您可能需要存储时间序列数据的示例情况
情况 | 测量量 | 元数据 |
---|---|---|
按行业记录月度销售额 | 美元收入 | 公司,国家 |
跟踪天气变化 | 降水量 | 位置,传感器类型 |
记录房价波动 | 月租金价格 | 位置,货币 |
创建时间序列集合
重要
时间序列集合的服务器版本
要创建和操作时间序列集合,您必须连接到运行MongoDB服务器5.0或更高版本的部署。
要创建时间序列集合,请将以下参数传递给create_collection()
方法
要创建的新集合的名称
timeseries
参数
timeseries
参数是类型为 dict
的。它包含以下字段
timeField
:指定存储每个时间序列文档中的时间戳的字段。metaField
:指定存储每个时间序列文档中的元数据的字段。granularity
:指定连续时间戳之间的近似时间。可能的值是'seconds'
、'minutes'
和'hours'
。bucketMaxSpanSeconds
:设置同一桶中时间戳之间的最大时间。bucketRoundingSeconds
:设置MongoDB设置新桶的最小时间戳时,向下取整的秒数。必须等于bucketMaxSpanSeconds
。
查看命令字段 了解这些字段的更多信息。
示例
以下示例创建了一个名为 october2024
的时间序列集合,并将 timeField
选项设置为 "timestamp"
。
database = client.get_database("weather") time_series_options = { "timeField": "timestamp" } database.create_collection("october2024", timeseries=time_series_options)
要检查是否成功创建了集合,您可以获取数据库中所有集合的列表并按集合名称进行筛选。
print(list(database.list_collections(filter={'name': 'october2024'})))
{ "name": "october2024", "type": "timeseries", "options": { "timeseries": { "timeField": "timestamp", "granularity": "seconds", "bucketMaxSpanSeconds": 3600 } }, "info": { "readOnly": False } }
存储时间序列数据
您可以通过使用 insert_one()
或 insert_many()
方法并将测量值、时间戳和元数据指定在每个插入的文档中,将数据插入到时间序列集合中。
要了解更多有关插入文档的信息,请参阅插入文档.
示例
本示例将纽约市的温度数据插入到在创建时间序列集合中创建的october2024
时间序列集合中。每个文档包含以下字段
temperature
,存储华氏温度测量值location
,存储位置元数据timestamp
,存储测量时间戳
from datetime import datetime collection = database["october2024"] document_list = [ { "temperature": 77, "location": "New York City", "timestamp": datetime(2024, 10, 22, 6, 0, 0) }, { "temperature": 74, "location": "New York City", "timestamp": datetime(2024, 10, 23, 6, 0, 0) } ] collection.insert_many(document_list)
查询时间序列数据
您可以使用与在其他集合上执行读取或聚合操作相同的语法和约定来查询存储在时间序列集合中的数据。有关这些操作的更多信息,请参阅从MongoDB读取数据和使用聚合转换您的数据。
更多信息
要了解更多关于本指南中概念的信息,请参阅以下MongoDB服务器手册条目
API 文档
要了解更多关于本指南中提到的方法,请参阅以下 API 文档