我想为会话集合使用TTL索引。我的问题是,我应该在服务器启动时只运行db.collection.createIndex()
一次,还是每次插入新文档后都必须运行命令?
对于后一种情况,代码如下:
DB.findOneAndUpdate(args)
.then((result) => {
DB.createIndex({
'name': 'sessions',
'keys': {'lastLogin': 1},
'options': {expireAfterSeconds: req.session.cookie.maxAge}
});
})
.catch((err) => console.log(err));
答案 0 :(得分:2)
我的问题是我应该只运行一次db.collection.createIndex() 当服务器启动时,或者每次都必须运行命令 插入新文件后?
您不应在每个插入上指定TTL索引。在日期类型或BSON日期类型对象的数组上创建索引,该索引将应用于每个文档。此外,您可以使用expireAfterSeconds
命令修改现有TTL索引的collMod
。查看these lines以获取更详细的讨论。
答案 1 :(得分:2)
创建TTL索引时,不需要做额外的事情。 只需插入文档并等待终止。
如果文档不包含索引字段,则文档不会过期。