MongoDB开发之 TTL索引

2021-01-03  本文已影响0人  五月笙

定义

TTL(Time To Live)索引是一种特殊类型的单字段索引,通过配置过期属性实现对文档的自动过期删除。

运行逻辑

MongoDB会开启一个后台线程读取该TTL索引的值来判断文档是否过期。

限制

演示

db.collection.createIndex(keys, options)

添加测试数据:

> for (i = 0; i < 10; i++) {
    db.machineLog.insert({
        "content": "机械日志" + i,
        "createdAt": new Date()
    })
}

添加TTL索引,5分钟后数据失效并删除

> db.machineLog.createIndex({createdAt:1}, {expireAfterSeconds:300})

查看数据:

> db.machineLog.find()
{
    "_id": ObjectId("5ff18eff9d594f01396c9ea7"),
    "content": "机械日志0",
    "createdAt": ISODate("2021-01-03T09:31:43.263Z")
}
{
    "_id": ObjectId("5ff18eff9d594f01396c9ea8"),
    "content": "机械日志1",
    "createdAt": ISODate("2021-01-03T09:31:43.275Z")
}
// ... 隐藏其他数据

5分钟后查看数据:

> db.machineLog.find()

修改

对于TTL索引的expireAfterSeconds的属性,可以用collMod方式进行修改>

重新写入数据:

> for (i = 0; i < 10; i++) {
    db.machineLog.insert({
        "content": "机械日志" + i,
        "createdAt": new Date()
    })
}

创建索引:

> db.machineLog.createIndex({createdAt:1}, {expireAfterSeconds:300})

查看索引:

[
    {
        "v": NumberInt("2"),
        "key": {
            "_id": NumberInt("1")
        },
        "name": "_id_",
        "ns": "machine.machineLog"
    },
    {
        "v": NumberInt("2"),
        "key": {
            "createdAt": 1
        },
        "name": "createdAt_1",
        "ns": "machine.machineLog",
        "expireAfterSeconds": 300
    }
]

修改TTL索引:

> db.runCommand({
    collMod: "machineLog",
    index: {
        keyPattern: {
            createdAt: 1
        },
        expireAfterSeconds: 60
    }
})

重新查看索引信息:

[
    {
        "v": NumberInt("2"),
        "key": {
            "_id": NumberInt("1")
        },
        "name": "_id_",
        "ns": "machine.machineLog"
    },
    {
        "v": NumberInt("2"),
        "key": {
            "createdAt": 1
        },
        "name": "createdAt_1",
        "ns": "machine.machineLog",
        "expireAfterSeconds": 60
    }
]

参考

MongoDB Documentation TTL
MongoDB TTL索引的使用

上一篇 下一篇

猜你喜欢

热点阅读