时间序列集合
概述
在本指南中,您可以学习如何使用 MongoDB PHP 库创建和交互 时间序列集合。这些集合存储时间序列数据,由以下组件组成
测量量
测量时间的戳记
描述测量的元数据
以下表格描述了您可以存储时间序列数据的示例情况
情况 | 测量量 | 元数据 |
---|---|---|
按行业记录月销售额 | 美元收入 | 公司,国家 |
跟踪天气变化 | 降水量 | 位置,传感器类型 |
记录房价波动 | 月租金价格 | 位置,货币 |
创建时间序列集合
重要
时间序列集合的服务器版本
要创建和交互时间序列集合,您必须连接到运行MongoDB服务器5.0或更高版本的部署。
您可以使用时间序列集合来存储时间序列数据。要创建时间序列集合,将选项数组传递给MongoDB\Database::createCollection()
方法,设置 timeseries
选项。设置此选项时,包括以下字段
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
命名空间中。有关更多信息,请参阅database.system.buckets 在 MongoDB 服务器手册中的说明。
插入时间序列数据
您可以通过使用 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文档