在最新的MongoDB java驱动程序中使用createIndex()时,索引已存在且具有不同的选项错误

时间:2014-12-04 07:22:07

标签: java mongodb indexing mongodb-java

所以我将MongoDB java驱动程序升级到2.12.4,其中ensureIndex()方法已被弃用。相反,我使用createIndex()方法从文档看起来与ensureIndex()类似。但是,当我在生产中使用此方法时,我收到以下错误 -

{ "serverUsed" : "X.X.X.X" , "ok" : 0.0 , "errmsg" : "Index with name: <index_name> already exists with different options" , "code" : 85}

为什么会这样?任何人都可以帮我解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:8)

在创建新索引之前尝试删除当前索引。

如果您担心这些索引的生产停机时间等,您可以:

  1. 添加第二个索引,就像现在生产的索引一样 用不同的名字。
  2. 删除现有的
  3. 重新启动服务器,以便按预期创建Java代码中的索引
  4. 删除重复的索引。

答案 1 :(得分:5)

Shaver的答案是否非常好,但实际上并未解决gravetii强调的问题。

如果您尝试在相同的字段上创建索引,具有相同的顺序但具有不同的选项,则

createIndex将失败并显示此错误。这是因为索引选项可能导致索引具有非常不同的属性。当您考虑具有unique标志的索引时,这是显而易见的。

如果您使用相同的字段,相同的顺序和相同的选项调用createIndex,它将按预期运行;不对集合的索引进行任何更改,也不会抛出异常。