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)沟通具体事宜。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)