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

gra*_*tii 7 java indexing mongodb 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}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Wil*_*ver 8

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

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

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


idb*_*ley 6

威尔·谢弗(Will Shaver)的回答很好,但实际上并没有解决Grattii突出显示的问题。

createIndex如果您尝试在相同字段,顺序,但选项不同的字段上创建索引,则会失败,并显示此错误。这是因为索引选项可能会导致索引具有非常不同的属性。当您考虑带有unique标志的索引时,这很明显。

如果您createIndex使用相同的字段,相同的顺序和相同的选项进行调用,它将表现出预期的效果;无需更改集合的索引,也不会引发异常。