MongoDB创建时间序列集合(附带实例)
在使用时间序列集合时需要注意,由于 MongoDB 数据库版本的兼容性,设计人员只能在 FeatureCompatibilityVersion 设置为 5.0 或更高版本的系统上创建时间序列集合。
MongoDB 使用 db.createCollection() 方法或 create 命令创建集合,具体代码如下:
创建时间序列集合后,设计人员可以使用 collMod 方法修改时间序列粒度或存储桶定义。但是,设计人员只能增加每个存储桶涵盖的时间跨度,却无法减少。可以通过定义一个granularity 字段来实现,具体代码如下:
在 MongoDB 6.3 及更高版本中,设计人员可以定义 bucketMaxSpanSeconds 和 bucketRoundingSeconds 字段,且这两个字段的值必须相同,具体代码如下:
还有一种可选的方式,即设置 expireAfterSeconds 字段,使文档在 timeField 的值达到该值时以及达到该值之后均过期:
MongoDB 使用 db.createCollection() 方法或 create 命令创建集合,具体代码如下:
db.createCollection("weather", { timeseries: { timeField: "timestamp", metaField: "metadata" } })上面的代码将 timeField 字段设置为包含时间数据的字段,将 metaField 字段设置为包含元数据的字段。
创建时间序列集合后,设计人员可以使用 collMod 方法修改时间序列粒度或存储桶定义。但是,设计人员只能增加每个存储桶涵盖的时间跨度,却无法减少。可以通过定义一个granularity 字段来实现,具体代码如下:
timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "seconds" }
在 MongoDB 6.3 及更高版本中,设计人员可以定义 bucketMaxSpanSeconds 和 bucketRoundingSeconds 字段,且这两个字段的值必须相同,具体代码如下:
timeseries: { timeField: "timestamp", metaField: "metadata", bucketMaxSpanSeconds: "300", bucketRoundingSeconds: "300" }
还有一种可选的方式,即设置 expireAfterSeconds 字段,使文档在 timeField 的值达到该值时以及达到该值之后均过期:
timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "seconds" }, expireAfterSeconds: 86400
在时间序列集合中插入测量值
在 MongoDB 中,设计人员插入的每个文档都应包含一个测量值。例如,要同时插入多个天气测量值文档,可以执行以下命令:db.weather.insertMany([ { "metadata": { "sensorId": 6688, "type": "temperature" }, "timestamp": ISODate("2024-08-18T00:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 6688, "type": "temperature" }, "timestamp": ISODate("2024-08-18T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 6688, "type": "temperature" }, "timestamp": ISODate("2024-08-18T16:00:00.000Z"), "temp": 16 }, { "metadata": { "sensorId": 6688, "type": "temperature" }, "timestamp": ISODate("2024-08-18T20:00:00.000Z"), "temp": 15 }, { "metadata": { "sensorId": 6688, "type": "temperature" }, "timestamp": ISODate("2024-08-19T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 6688, "type": "temperature" }, "timestamp": ISODate("2024-08-19T16:00:00.000Z"), "temp": 17 }, { "metadata": { "sensorId": 6688, "type": "temperature" }, "timestamp": ISODate("2024-08-19T20:00:00.000Z"), "temp": 12 } ])如果要插入单个文档,设计人员可以使用 db.weather.insertOne()方法进行操作。