使用mongodb在java中createIndex()和ensureIndex()之间的区别

Ami*_*har 41 java mongodb mongodb-java

使用MongoDB createIndex()ensureIndex()Java 之间有什么区别?我用Google搜索了这个,但没有得到满意的答案.

sol*_*4me 29

更新2: 原始答案以及第一次更新错误地引用了Mongo shell文档而不是Java API.

在Java中,DBCollection.ensureIndex()在2.12版中已弃用,在3.0版中已删除.DBCollection.createIndex()是应该使用的那个.

更新:
db.collection.ensureIndex()自3.0.0版以来不推荐使用.
现在是db.collection.createIndex()的别名.

原文:自1.8以来
createIndex()弃用

它用于在集合上创建索引,而如果索引尚不存在,则在ensureIndex()指定字段上创建索引.此外,当我们执行createIndex()两次时,第二次执行将失败,ensureIndex()你可以多次调用它,它不会失败

还有一件事,他们改变有关的行为ensureIndex(),在MongoDB中的以前版本(版本小于2.6),如果对现有文档的索引条目超过最大索引键长度的索引将被创建,但MongoDB中不会索引此类文件,而在最新版本不会创建索引.

  • 根据[mongodb docs](http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/),不推荐使用ensureIndex()`. (15认同)

Jen*_*lla 14

在Java API中,与"普通"MongoDB API(在响应时)相比,DBCollection.ensureIndex()不赞成使用.更新:此不一致似乎已经解决,现在也替换在Mongo shell中.db.collection.createIndex()db.collection.ensureIndex()

正如您在https://jira.mongodb.org/browse/JAVA-1097中所看到的,在ensureIndex()Java驱动程序的版本2.12.0中已弃用Java(OP询问的),并且DBCollection.createIndex()您需要使用它.DBCollection.ensureIndex()(链接到版本2.12)在DBCollection Java API中不再可用.

  • 好的,我想这就是它.我的正确和记录的答案被删除两次,得分两次,而另一个与正确答案正好相反的答案是+3.显然,我无能为力.感谢@Dici至少回复.顺便说一下,我在这里回复是因为我没有声誉可以按照SO的建议将讨论转移到聊天中,这也是为什么我最初的答案不是对现有答案的评论. (3认同)
  • 对不起,但我的回答什么都没用?我说@ sol4me错了,在Java API中你实际上必须使用createIndex().我甚至参考了相应的JIRA问题,我设法向MongoDB开发人员澄清了这个问题......如果我得到那些删除我的答案的人的答复,我会编辑它而不是留下所有的东西来显示它是如何被删除的.事实上,在我努力与开发人员讨论事情之后,这对我来说都非常敌视,所以我可以给出正确的答案. (2认同)