时间序列快速入门
本快速入门指南介绍如何借助 MongoDB Atlas 或自管理部署来配置、创建和查询时间序列集合。
所需时间:30 分钟
步骤
设置您的 Atlas 集群。
如果您还没有 Atlas 集群,则可免费创建一个 M0 集群。要了解有关创建 Atlas 集群的更多信息,请参阅创建集群。
注意
如果您使用的是现有集群,则必须拥有 Atlas 项目的
Project Data Access Admin
或更高访问权限。如果创建新集群,则默认拥有必要的权限。
每个项目只能创建一个
M0
免费集群。在左侧边栏中,单击 Overview(概述)。选择您的集群,然后单击 Connect。
在“Access your data through tools”(通过工具访问您的数据)下,单击 Shell。
如果您尚无这些权限,则请按照提供的步骤下载并安装
mongosh
。复制您的连接字符串,然后点击 Done。
打开一个新的终端窗口并连接到您的部署。
使用 mongosh
连接到您的自管理部署或 Atlas 部署。例如:
mongosh "mongodb+srv://my-test-cluster.1twap.mongodb.net/" --apiVersion 1 --username <user>
创建一个空的时间序列集合。
注意
本练习使用了股票代码示例数据。date
字段存储了时间数据,ticker
字段则用于标识单个股票。
设置
timeField
、metaField
和granularity
:timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds" } 或者指定自定义粒度:
6.3 版本中的新功能。
timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds", bucketMaxSpanSeconds: "300", bucketRoundingSeconds: "300" } 使用
db.createCollection()
方法创建该集合:db.createCollection( "stocks", { timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds" } }) 这将创建一个名为
stocks
的空时间序列集合。
添加示例文档。
运行db.collection.insertMany()
方法以将以下示例文档添加到此集合中:
db.stocks.insertMany([ { ticker: "MDB", date: ISODate("2021-12-18T15:59:00.000Z"), close: 252.47, volume: 55046.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:58:00.000Z"), close: 252.93, volume: 44042.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:57:00.000Z"), close: 253.61, volume: 40182.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:56:00.000Z"), close: 253.63, volume: 27890.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:55:00.000Z"), close: 254.03, volume: 40270.00} ])
如果您在 Atlas 上运行 MongoDB,您可以单击 Browse collections 查看示例数据。
查询该数据。
您查询时间序列集合的方式与查询其他 MongoDB 集合的方式相同。有关更多信息,请参阅关于查询时间序列数据。
时间序列数据的常见查询为:查询 metaField
以获取单个时间序列的数据,或对 timeField
使用范围查询以获取特定时间跨度的对应数据。
要查询 metaField
以获取单个时间序列:
db.stocks.find( { ticker: "MDB" } )
要查询某一时间跨度的对应 timeField
:
db.stocks.find({ date : { $gte : ISODate("2021-12-18T15:50:00.000Z"), $lte : ISODate("2021-12-18T15:56:00.000Z")} });
安装依赖项。
有关详细说明,请参阅先决条件。
如果使用 Homebrew ,则可以在终端中运行以下命令:
brew install mongodb-atlas-cli 安装 Docker。
Docker需要网络连接来拉取和缓存MongoDB映像。
对于 macOS 或 Windows,请安装 Docker 桌面 v4.31+。
对于 Linux,请安装 Docker Engine v27.0+。
对于 RHEL,您还可以使用 Podman v5.0 +。
设置本地 Atlas 部署。
如果没有 Atlas 账户,请在终端运行
atlas setup
或创建新帐户。运行
atlas deployments setup
并按照提示创建本地部署。当系统提示连接到部署时,选择skip
。有关详细说明,请参阅创建本地 Atlas 部署。
安装 mongosh
。
打开一个新的终端窗口并连接到您的部署。
使用 mongosh
连接到您的自管理部署或 Atlas 部署。例如:
mongosh "mongodb+srv://my-test-cluster.1twap.mongodb.net/" --apiVersion 1 --username <user>
创建一个空的时间序列集合。
注意
本练习使用了股票代码示例数据。date
字段存储了时间数据,ticker
字段则用于标识单个股票。
设置
timeField
、metaField
和granularity
:timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds" } 或者指定自定义粒度:
6.3 版本中的新功能。
timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds", bucketMaxSpanSeconds: "300", bucketRoundingSeconds: "300" } 使用
db.createCollection()
方法创建该集合:db.createCollection( "stocks", { timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds" } }) 这将创建一个名为
stocks
的空时间序列集合。
添加示例文档。
运行db.collection.insertMany()
方法以将以下示例文档添加到此集合中:
db.stocks.insertMany([ { ticker: "MDB", date: ISODate("2021-12-18T15:59:00.000Z"), close: 252.47, volume: 55046.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:58:00.000Z"), close: 252.93, volume: 44042.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:57:00.000Z"), close: 253.61, volume: 40182.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:56:00.000Z"), close: 253.63, volume: 27890.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:55:00.000Z"), close: 254.03, volume: 40270.00} ])
如果您在 Atlas 上运行 MongoDB,您可以单击 Browse collections 查看示例数据。
查询该数据。
您查询时间序列集合的方式与查询其他 MongoDB 集合的方式相同。有关更多信息,请参阅关于查询时间序列数据。
时间序列数据的常见查询为:查询 metaField
以获取单个时间序列的数据,或对 timeField
使用范围查询以获取特定时间跨度的对应数据。
要查询 metaField
以获取单个时间序列:
db.stocks.find( { ticker: "MDB" } )
要查询某一时间跨度的对应 timeField
:
db.stocks.find({ date : { $gte : ISODate("2021-12-18T15:50:00.000Z"), $lte : ISODate("2021-12-18T15:56:00.000Z")} });
安装 mongosh
。
打开一个新的终端窗口并连接到您的部署。
使用 mongosh
连接到您的自管理部署或 Atlas 部署。例如:
mongosh "mongodb+srv://my-test-cluster.1twap.mongodb.net/" --apiVersion 1 --username <user>
创建一个空的时间序列集合。
注意
本练习使用了股票代码示例数据。date
字段存储了时间数据,ticker
字段则用于标识单个股票。
设置
timeField
、metaField
和granularity
:timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds" } 或者指定自定义粒度:
6.3 版本中的新功能。
timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds", bucketMaxSpanSeconds: "300", bucketRoundingSeconds: "300" } 使用
db.createCollection()
方法创建该集合:db.createCollection( "stocks", { timeseries: { timeField: "date", metaField: "ticker", granularity: "seconds" } }) 这将创建一个名为
stocks
的空时间序列集合。
添加示例文档。
运行db.collection.insertMany()
方法以将以下示例文档添加到此集合中:
db.stocks.insertMany([ { ticker: "MDB", date: ISODate("2021-12-18T15:59:00.000Z"), close: 252.47, volume: 55046.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:58:00.000Z"), close: 252.93, volume: 44042.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:57:00.000Z"), close: 253.61, volume: 40182.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:56:00.000Z"), close: 253.63, volume: 27890.00}, { ticker: "MDB", date: ISODate("2021-12-18T15:55:00.000Z"), close: 254.03, volume: 40270.00} ])
如果您在 Atlas 上运行 MongoDB,您可以单击 Browse collections 查看示例数据。
查询该数据。
您查询时间序列集合的方式与查询其他 MongoDB 集合的方式相同。有关更多信息,请参阅关于查询时间序列数据。
时间序列数据的常见查询为:查询 metaField
以获取单个时间序列的数据,或对 timeField
使用范围查询以获取特定时间跨度的对应数据。
要查询 metaField
以获取单个时间序列:
db.stocks.find( { ticker: "MDB" } )
要查询某一时间跨度的对应 timeField
:
db.stocks.find({ date : { $gte : ISODate("2021-12-18T15:50:00.000Z"), $lte : ISODate("2021-12-18T15:56:00.000Z")} });
样本数据
本快速入门将创建一个具有以下文档结构的 stocks
时间序列集合。
{ _id: ObjectId(...), ticker: <string>, date: ISODate(...), close: <double>, volume: <double> }
学习总结
本快速入门重点介绍如何创建新的时间序列集合。由于时间序列集合会针对时间数据进行优化,因此其性能在很大程度上取决于您在创建时的配置方式。有关更多信息,请参阅时间序列集合注意事项。
后续步骤
要将现有数据迁移到时间序列集合,请参阅将数据迁移到时间序列集合。
要对时间序列集合进行分片,请参阅对时间序列集合进行分片。
有关特定于时间序列集合的聚合与查询行为,请参阅聚合和操作符注意事项。