无法重新创建具有相同名称的mongo索引

时间:2017-04-11 07:04:01

标签: mongodb spring-mongo

我有一个我需要修改的索引。

    {
    "v" : 1,
    "key" : {
        "expectedDateTime" : 1
    },
    "name" : "expectedDateTime_1",
    "ns" : "expectation.expectation_data",
    "expireAfterSeconds" : 43200
}

expireAfterSeconds不正确,需要更改为432000。

当我删除索引时,它看起来很好

db.expectation_data.dropIndex({"expectedDateTime":1})
{ "nIndexesWas" : 4, "ok" : 1 }

getIndexes()显示索引不存在。

然后,当我尝试重新创建索引时,我收到此错误

db.expectation_data.createIndex({"expectedDateTime":1}, 
{expireAfterSeconds:432000,name:"expectedDateTime"});
{
    "ok" : 0,
    "errmsg" : "Index with name: expectedDateTime already exists with different options",
    "code" : 85
}

现在运行getIndexes(),我发现索引似乎已经用旧TTL重新创建了。我尝试过多次重复这个过程,但一次又一次遇到同样的问题。

我找不到任何说明我无法重新创建同名索引的文档。如果我使用不同的名称,它可以正常工作

db.expectation_data.createIndex({"expectedDateTime":1}, {expireAfterSeconds:432000});
.
.
>db.expectation_data.getIndexes()
.
.
{
    "v" : 1,
    "key" : {
        "expectedDateTime" : 1
    },
    "name" : "expectedDateTime_1",
    "ns" : "expectation.expectation_data",
    "expireAfterSeconds" : 432000
}

重新创建具有相同名称的索引是否有任何限制?

2 个答案:

答案 0 :(得分:0)

这看起来像删除后自动重建索引。确保没有使用ensureIndex@Index - 注释的应用程序连接到数据库。

答案 1 :(得分:-1)

事实证明。这是由于具有旧超时的实体中使用的@Index注释。当我更改索引时,应用程序仍在运行。

当我停止申请时,我能够按照我原先的预期创建索引