时间序列集合
Overview
在本指南中,您可以学习;了解如何使用MongoDB PHP库创建时间序列集合并交互。 这些集合存储时间序列数据,由以下部分组成:
测量数量
测量的时间戳
描述测量的元数据
下表描述了可以存储时间序列数据的示例情况:
情况 | 测量数量 | Metadata |
---|---|---|
按行业记录月度销售额 | 收入(美元) | 公司、国家/地区 |
追踪天气变化 | 降水量 | 位置、传感器类型 |
记录房价波动 | 月租价格 | 位置、货币 |
创建时间序列集合
重要
时间序列集合的服务器版本
要创建时间序列集合并与之交互,必须连接到运行 MongoDB Server 5.0或更高版本的部署。
您可以创建时间序列集合来存储时间序列数据。 要创建时间序列集合,请将选项大量传递给设置timeseries
选项的 MongoDB\Database::createCollection()
方法。 设置此选项时,请包含以下字段:
timeField
:指定在每个时间序列文档中存储时间戳的字段。metaField
:指定每个时间序列文档中存储元数据的字段。granularity
:指定连续时间戳之间的大致时间。 可能的值为'seconds'
、'minutes'
和'hours'
。
例子
此示例使用以下配置在precipitation
数据库中创建sept2023
时间序列集合:
timeField
设置为'timestamp'
metaField
设置为'location'
granularity
设置为'minutes'
$db = $client->precipitation; $options = [ 'timeseries' => [ 'timeField' => 'timestamp', 'metaField' => 'location', 'granularity' => 'minutes', ] ]; $collection = $db->createCollection('sept2023', $options);
要验证是否已成功创建时间序列集合,请对数据库调用MongoDB\Database::listCollections()
方法并打印结果:
$cursor = $db->listCollections(); foreach ($cursor as $collectionInfo) { print_r($collectionInfo) . PHP_EOL; }
MongoDB\Model\CollectionInfo Object ( [name] => sept2023 [type] => timeseries [options] => Array ( … ) [info] => Array ( … ) ) MongoDB\Model\CollectionInfo Object ( [name] => system.buckets.sept2023 [type] => collection [options] => Array ( … ) [info] => Array ( … ) )
注意
MongoDB将与时间序列集合相关的系统数据存储在<database>.system.buckets
命名空间中。 有关更多信息,请参阅MongoDB Server手册中的数据库.system.buckets 。
插入时间序列数据
您可以使用MongoDB\Collection::insertOne()
或MongoDB\Collection::insertMany()
方法将数据插入到时间序列集合中,并在每个插入的文档中指定测量值、时间戳和元数据。
提示
要学习;了解有关在集合中插入文档的更多信息,请参阅插入文档指南。
例子
此示例将纽约市降水数据插入到创建时间序列集合示例中创建的sept2023
时间序列集合中。 每个文档包含以下字段:
precipitation_mm
,以毫米为单位存储降水量测量值location
,用于存储位置元数据timestamp
,其中存储了测量集合的时间
$collection = $db->sept2023; $result = $collection->insertMany( [ [ 'precipitation_mm' => 0.5, 'location' => 'New York City', 'timestamp' => new MongoDB\BSON\UTCDateTime(1694829060000), ], [ 'precipitation_mm' => 2.8, 'location' => 'New York City', 'timestamp' => new MongoDB\BSON\UTCDateTime(1695594780000), ], ] );
查询时间序列集合
您可以使用与对其他集合执行读取或聚合操作时相同的语法和约定来查询时间序列集合中存储的数据。 要查找有关这些操作的更多信息,请参阅“其他信息”部分。
更多信息
要了解有关本指南中提到的概念的更多信息,请参阅以下服务器手册条目:
要学习;了解有关执行读取操作的更多信息,请参阅从MongoDB读取数据。
要学习;了解有关执行聚合操作的更多信息,请参阅《使用聚合转换数据》指南。
API 文档
要学习;了解有关本指南中提到的方法的更多信息,请参阅以下API文档: