mongoose 如何从MongoDB集合中删除TTL?

iyr7buue  于 2023-10-19  发布在  Go
关注(0)|答案(2)|浏览(145)

我在node.js中使用mongoose。我正在测试Time-To-Live功能,并在db模式中将我的文档设置为在X时间后过期:

var adInfos = new mongoose.Schema({                           
  inf  : { type: Object, required: false },                    
  created: { type: Date, default: Date.now, expires:60 }
});

这似乎是正确的,但在删除expires属性后,新文档似乎仍然过期。
我也试过设置expires: falseexpires:0,但这也不起作用。

5lhxktic

5lhxktic1#

Mongoose永远不会删除索引,所以如果您更改了模式中的索引属性,它们将在您手动删除现有索引之后才生效。
我不知道你的集合名是什么,但在shell中它应该是这样的:

db.adInfos.dropIndex('created_1')

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

gcuhipw9

gcuhipw92#

@JohnnyHK的回答是有效的,我为那些通过mongoose创建TTL的人添加了一些早期步骤(在那里你不能控制createdAt名称):
连接到您的数据库:

use <your db>

为了知道你需要删除什么索引,首先你应该得到所有的索引:

db.adInfos.getIndexes()

你应该得到如下的东西:

然后删除索引及其名称:

db.adInfos.dropIndex("created_at_1")

相关问题