如何从MongoDB集合中删除TTL?

3
我是使用mongoose和node.js。我正在测试Time-To-Live功能,并在数据库模式中设置了我的文档在X时间后过期:
var adInfos = new mongoose.Schema({                           
  inf  : { type: Object, required: false },                    
  created: { type: Date, default: Date.now, expires:60 }
});                                                           

这似乎是有效的,但在删除expires属性后,新文档仍然会过期。
我还尝试设置expires: falseexpires:0,但也不起作用。
2个回答

4

Mongoose永远不会删除索引,所以如果您更改模式中的索引属性,则在手动删除现有索引之前,它们不会生效。

不确定您的集合名称是什么,但在shell中,它可能类似于:

db.adInfos.dropIndex('created_1')

使用 db.adInfos.getIndexes() 命令可以查看集合上的索引。

谢谢,这似乎解决了问题。 - user2865156

0
@JohnnyHK的回答是有效的,我还要为那些通过mongoose创建了TTL(其中你无法控制createdAt名称)的人添加一些早期步骤:
连接到你的数据库:
use <your db>

为了知道您需要删除哪个索引,首先应该获取所有的索引。
db.adInfos.getIndexes()

你应该得到类似以下内容的东西:

enter image description here

然后您使用其名称删除索引:
db.adInfos.dropIndex("created_at_1")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接