Docs 菜单

时间序列快速入门

本快速入门指南介绍如何借助 MongoDB Atlas 或自管理部署来配置、创建和查询时间序列集合。

所需时间:30 分钟

1
  1. 创建免费的 Atlas 帐户或登录现有帐户。

  2. 如果您还没有 Atlas 集群,则可免费创建一个 M0 集群。要了解有关创建 Atlas 集群的更多信息,请参阅创建集群

    注意

    如果您使用的是现有集群,则必须拥有 Atlas 项目的Project Data Access Admin或更高访问权限

    如果创建新集群,则默认拥有必要的权限。

    每个项目只能创建一个 M0 免费集群。

  3. 在左侧边栏中,单击 Overview(概述)。选择您的集群,然后单击 Connect

  4. 在“Access your data through tools”(通过工具访问您的数据)下,单击 Shell

    如果您尚无这些权限,则请按照提供的步骤下载并安装 mongosh

  5. 复制您的连接字符串,然后点击 Done

2

使用 mongosh 连接到您的自管理部署或 Atlas 部署。例如:

mongosh "mongodb+srv://my-test-cluster.1twap.mongodb.net/" --apiVersion 1
--username <user>
3
use timeseries

此操作将创建并切换到一个空的“timeseries”数据库。

4

注意

本练习使用了股票代码示例数据date 字段存储了时间数据,ticker 字段则用于标识单个股票。

  1. 设置 timeFieldmetaFieldgranularity

    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds"
    }

    或者指定自定义粒度:

    6.3 版本中的新功能

    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds",
    bucketMaxSpanSeconds: "300",
    bucketRoundingSeconds: "300"
    }
  2. 使用 db.createCollection() 方法创建该集合:

    db.createCollection(
    "stocks",
    {
    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds"
    }
    })

    这将创建一个名为 stocks 的空时间序列集合。

5

运行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 查看示例数据。

6

您查询时间序列集合的方式与查询其他 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")}
});
1

有关详细说明,请参阅先决条件。

  1. 安装Atlas CLI。

    如果使用 Homebrew ,则可以在终端中运行以下命令:

    brew install mongodb-atlas-cli

    有关其他操作系统上的安装说明,请参阅安装Atlas CLI

  2. 安装 Docker。

    Docker需要网络连接来拉取和缓存MongoDB映像。

2
  1. 如果没有 Atlas 账户,请在终端运行 atlas setup创建新帐户

  2. 运行 atlas deployments setup 并按照提示创建本地部署。当系统提示连接到部署时,选择 skip

    有关详细说明,请参阅创建本地 Atlas 部署。

3
4

使用 mongosh 连接到您的自管理部署或 Atlas 部署。例如:

mongosh "mongodb+srv://my-test-cluster.1twap.mongodb.net/" --apiVersion 1
--username <user>
5
use timeseries

此操作将创建并切换到一个空的“timeseries”数据库。

6

注意

本练习使用了股票代码示例数据date 字段存储了时间数据,ticker 字段则用于标识单个股票。

  1. 设置 timeFieldmetaFieldgranularity

    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds"
    }

    或者指定自定义粒度:

    6.3 版本中的新功能

    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds",
    bucketMaxSpanSeconds: "300",
    bucketRoundingSeconds: "300"
    }
  2. 使用 db.createCollection() 方法创建该集合:

    db.createCollection(
    "stocks",
    {
    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds"
    }
    })

    这将创建一个名为 stocks 的空时间序列集合。

7

运行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 查看示例数据。

8

您查询时间序列集合的方式与查询其他 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")}
});
1

如果您运行的是自管理部署,则请按照适用于您的 MongoDB 版本、分类版本和平台的安装说明进行操作。

2
3

使用 mongosh 连接到您的自管理部署或 Atlas 部署。例如:

mongosh "mongodb+srv://my-test-cluster.1twap.mongodb.net/" --apiVersion 1
--username <user>
4
use timeseries

此操作将创建并切换到一个空的“timeseries”数据库。

5

注意

本练习使用了股票代码示例数据date 字段存储了时间数据,ticker 字段则用于标识单个股票。

  1. 设置 timeFieldmetaFieldgranularity

    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds"
    }

    或者指定自定义粒度:

    6.3 版本中的新功能

    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds",
    bucketMaxSpanSeconds: "300",
    bucketRoundingSeconds: "300"
    }
  2. 使用 db.createCollection() 方法创建该集合:

    db.createCollection(
    "stocks",
    {
    timeseries: {
    timeField: "date",
    metaField: "ticker",
    granularity: "seconds"
    }
    })

    这将创建一个名为 stocks 的空时间序列集合。

6

运行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 查看示例数据。

7

您查询时间序列集合的方式与查询其他 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>
}

本快速入门重点介绍如何创建新的时间序列集合。由于时间序列集合会针对时间数据进行优化,因此其性能在很大程度上取决于您在创建时的配置方式。有关更多信息,请参阅时间序列集合注意事项