db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "hours"
},
expireAfterSeconds: 86400
}
)
过期阈值是 timeField 字段值加上指定的秒数。考虑 weather24h 集合中的以下文档:
{
"metadata": {"sensorId": 5578, "type": "temperature"},
"timestamp": ISODate("2021-05-18T10:00:00.000Z"),
"temp": 12
}
要对已经存在的时间序列集合启用自动删除文档功能,执行如下 collMod
命令:
db.runCommand({
collMod: "weather24h",
expireAfterSeconds: 604801
})
要修改 expireAfterSeconds 参数的值,执行如下 collMod
命令:
db.runCommand({
collMod: "weather24h",
expireAfterSeconds: 604801
})
要获取 expireAfterSeconds 当前值,使用 listCollections
命令:
db.runCommand( { listCollections: 1 } )
该命令查询结果为时间序列集合中一个包含 options.expireAfterSeconds 字段的文档。
{
cursor: {
id: <number>,
ns: 'test.$cmd.listCollections',
firstBatch: [
{
name: <string>,
type: 'timeseries',
options: {
expireAfterSeconds: <number>,
timeseries: { ... }
},
...
},
...
]
}
}
要禁用自动删除,使用 collMod
将 expireAfterSeconds 设置为 off:
db.runCommand({
collMod: "weather24h",
expireAfterSeconds: "off"
})
删除操作时机
MongoDB 不保证过期数据在过期时刻立即被删除。一旦某个桶中的所有文档都过期了,删除过期桶的后台任务将在下次运行时删除该桶。单个桶允许覆盖的最大时间跨度由时间序列集合的 granularity 控制:
|
|
|
|
|
|
|
|
由于删除操作的持续时间取决于 mongod 实例的工作负载,因此在后台任务运行之间的60秒周期之外,过期数据可能还会存在一段时间。
评论前必须登录!
注册