MongoDB 功能详解之时间序列集合(Time Series Collections)

MongoDB 功能详解之时间序列集合(Time Series Collections)           

时间序列集合(Time Series Collections):MongoDB 5.0 版本中的新功能。

时间序列数据是一系列数据点,通过分析这些随时间变化的数据点而获得对数据的深刻理解。

时间序列数据通常由以下组成部分组成:

  • 时间:数据点何时被记录
  • 元数据(有时称为源):一个标签或标记,唯一标识一个序列,并且很少更改
  • 测量值(有时称为指标或值):按时间增量跟踪的数据点,通常是随时间变化的键-值对。

下表列出了一些时间序列数据的例子:

 

 

 

入门

 

要开始使用时间序列集合,请参阅文档:创建并查询时间序列集合

原文:Time Series

关于译者:

张清荣,MongoDB 中文社区成员,现就职于中国联通软件研究院。

【推荐阅读】

 

 MongoDB 如何创建并查询时间序列集合?

上一篇重点介绍了时间序列数据和 MongoDB 时间序列集合功能的基本情况,本篇则将着重通过示例代码展示如何创建和查询时间序列集合

 

创建时间序列集合

 

在将数据插入时间序列集合之前,必须先使用 db.createCollection() 方法或 create 命令创建集合:

db.createCollection(
"weather",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "hours"
}
}
)

 

 

 

 

db.weather.insertMany( [
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T00:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T04:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T08:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T12:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T16:00:00.000Z"),
"temp": 16
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T20:00:00.000Z"),
"temp": 15
}, {
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T00:00:00.000Z"),
"temp": 13
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T04:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T08:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T12:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T16:00:00.000Z"),
"temp": 17
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T20:00:00.000Z"),
"temp": 12
}
] )

要插入单个文档,使用 db.collection.insertOne() 方法。

📒 提示:

优化插入性能要了解如何为大型操作优化插入,请参阅优化插入(Optimize Inserts)

查询时间序列集合

 

可以按照查询标准 MongoDB 集合的方式查询时间序列集合。

要从时间序列集合中返回一个文档,执行:

db.weather.findOne({
"timestamp": ISODate("2021-05-18T00:00:00.000Z")
})

示例输出:

{
timestamp: ISODate("2021-05-18T00:00:00.000Z"),
metadata: { sensorId: 5578, type: 'temperature' },
temp: 12,
_id: ObjectId("62f11bbf1e52f124b84479ad")
}

 

在时间序列集合上进行聚合运算


对于额外的查询功能,可以使用聚合管道(aggregation pipeline),例如:

db.weather.aggregate( [
{
$project: {
date: {
$dateToParts: { date: "$timestamp" }
},
temp: 1
}
},
{
$group: {
_id: {
date: {
year: "$date.year",
month: "$date.month",
day: "$date.day"
}
},
avgTmp: { $avg: "$temp" }
}
}
] )

这个聚合管道示例根据测量日期对所有文档进行分组,然后返回当天测量温度的平均值:

 {
"_id" : {
"date" : {
"year" : 2021,
"month" : 5,
"day" : 18
}
},
"avgTmp" : 12.714285714285714
}
{
"_id" : {
"date" : {
"year" : 2021,
"month" : 5,
"day" : 19
}
},
"avgTmp" : 13
}

 

原文:Create and Query a Time Series Collection

关于译者:

张清荣,MongoDB 中文社区成员,现就职于中国联通软件研究院。

【推荐阅读】

 

数据库中的时间序列集合(List Time Series Collections in a Database)           

【相关导读】

>>> 技术干货 | MongoDB 如何创建并查询时间序列集合?

>>> 技术干货 | MongoDB 功能详解之时间序列集合(Time Series Collections)

在了解了时序数据、MongoDB 时间序列集合功能的基本情况,以及如何创建和查询时间序列集合之后,本篇将继续拓展讲解时间序列集合的相关内容。

我们可以在查询指令的条件中额外加入 type 属性,这样输出的集合结果中就会带有时间序列。也可以通过只包含 type 作为筛选条件的指令,列出数据库中的所有时间序列集合。

 

程序


使用列表集(listCollections)指令,并将过滤条件设为{ type: "timeseries" },就可以列出数据库中所有的时间序列集合。操作如下:

db.runCommand( {
listCollections: 1,
filter: { type: "timeseries" }
} )

 

输出

 

要获取时间序列集合作为输出结果,指令中筛选条件需要包括:

type: 'timeseries'

options: { timeseries: { ... } }

样例:

{
cursor: {
id: Long("0"),
ns: 'test.$cmd.listCollections',
firstBatch: [
{
name: 'weather',
type: 'timeseries',
options: {
timeseries: {
timeField: 'timestamp',
metaField: 'metadata',
granularity: 'hours',
bucketMaxSpanSeconds: 2592000
}
},
info: { readOnly: false }
}
]
},
ok: 1
}

原文:List Time Series Collections in a Database关于译者:
刘东方,MongoDB 中文社区成员,现就职于中国联通软件研究院,目前专注于 MongoDB 数据库运维与技术支持。

社区招募

为了让社区组委会成员和志愿者朋友们灵活参与,同时我们为想要深度参与社区建设的伙伴们开设了“招募通道”,如果您想要在社区里面结交志同道合的技术伙伴,想要通过在社区沉淀有价值的干货内容,想要一个展示自己的舞台,提升自身的技术影响力,即刻加入社区贡献队伍~ 点击提交申请

社区合作

接下来我们会在诸多城市举办技术大会,如果您有优质的议题和 MongoDB 相关经验的嘉宾可以与我们分享,或者有赞助合作意向的小伙伴,包含但不限制于联合主办方、媒体合作等,都可以随时联系我们的社区助手小芒果(微信ID:mongoingcom)沟通具体事宜。

 

 

 

 

posted @ 2023-05-13 13:22  binbinx  阅读(1379)  评论(0编辑  收藏  举报