时间序列数据
Overview
在本指南中,您可以学习;了解如何使用PyMongo存储时间序列数据并交互。
时间序列数据由以下部分组成:
测量数量
测量的时间戳
描述测量的元数据
下表描述了可以存储时间序列数据的示例情况:
情况 | 测量数量 | Metadata |
---|---|---|
按行业记录月度销售额 | 收入(美元) | 公司、国家/地区 |
追踪天气变化 | 降水量 | 位置、传感器类型 |
记录房价波动 | 月租价格 | 位置、货币 |
创建时间序列集合
重要
时间序列集合的服务器版本
要创建时间序列集合并与之交互,必须连接到运行 MongoDB Server 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 Server手册条目:
API 文档
要学习;了解有关本指南中提到的方法的更多信息,请参阅以下API文档: