我在一天当中不同时间段插入若干条数据,但是我想这些数据插入mongodb 后 ,到了明天这些数据自动删除,如何设置时间索引呢?
db.auth_session.createIndex({ "createTime": 1 }, { expireAfterSeconds: 60*2 })
我在网上看到的是这种固定的时间索引 应该是2分钟,但是我每次插入数据的时间段不一样,这个时间索引肯定是基于每次 “插入数据的时间” 每次时间索引有效时间 不一样的,请问我如何操作呢?
比如我今天早上8点插入的数据 距离明天还要 16个小时这个数据自动删除。
今天下午 14:00插入的数据 距离明天还要10小时,这个数据自动删除。
如何设置过期索引呢?
可以通过Mongodb的TTL(Time-To-Live)索引来实现数据的过期自动删除功能。
以下是一些实现步骤:
- 安装 pymongo 库,并与MongoDB建立连接。
- 创建一个新的collection或在现有的collection上创建新的索引。例如,如果要在名为mycollection的collection中创建TTL索引,可以执行以下代码:collection = db[‘mycollection’] collection.create_index([(‘expireAt’, pymongo.ASCENDING)], expireAfterSeconds=0)注意:在索引中指定的字段必须是时间类型,下面的代码演示了如何在文档中使用”expireAt”字段来存储记录的过期时间:import pymongo from datetime import datetime, timedelta dbClient = pymongo.MongoClient() db = dbClient[‘mydb’] collection = db[‘mycollection’] # 插入一条新数据,包含expireAt字段来指定记录的过期时间 expire_time = datetime.utcnow() + timedelta(days=1) data = {“username”: “john”, “expireAt”: expire_time} collection.insert_one(data)上面的代码将在 collection 中插入了一条数据并将其与 expireAt 键关联,该键的值为过期日期。过期日期设置为明天的相同时间。
- 在 ttl_index 命令中设置 expireAfterSeconds 参数为 0,这将在指定的时间后删除已过期的文档。以上代码在创建索引时同时设置了过期
“pymongo.ASCENDING”实际上是使用了Python中pymongo模块中的一个常量,表示升序索引。
如果你是直接在Linux终端里使用MongoDB自带的命令行工具mongo来操作,可以使用1来表示升序索引,如下所示:
db.collection.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
其中,1表示升序索引,-1表示降序索引。
需要注意的是,MongoDB自带的命令行工具mongo并不支持过期索引的创建,需要在pymongo等客户端库中使用相应函数来创建过期索引。