Java中使用MongoDB的createIndex()和ensureIndex()有什么区别?我在谷歌上搜索了一下,但没有得到满意的答案。
createIndex()
ensureIndex()
abithluo1#
**更新2:**最初的答案以及第一次更新错误地引用了Mongo shell文档,而不是Java API。
在Java中,DBCollection.ensureIndex()在版本2.12中被弃用,并在版本3.0中被删除。
DBCollection.ensureIndex()
更新日期:
db.collection.ensureIndex()自版本3.0.0起已弃用。现在是db.collection.createIndex()的别名。
db.collection.ensureIndex()
原件:
createIndex()自1.8起已弃用它用于在集合上创建索引,而ensureIndex()在指定的字段上创建索引(如果索引不存在)。此外,当我们执行createIndex()两次时,第二次执行只会失败,而ensureIndex()可以多次调用它,它将不会失败关于ensureIndex()的行为,他们还改变了一件事,在以前版本的mongodb(版本小于2.6)中,如果现有文档的索引条目超过最大索引键长度,则会创建索引,但Mongodb不会索引此类文档,而在最近的版本中不会创建索引。
pvabu6sv2#
在Java API中,DBCollection.ensureIndex()已被弃用,与“正常”MongoDB API(在响应时)完全相反。更新:这种不一致性似乎已经得到解决,现在db.collection.createIndex()在Mongo shell中也取代了db.collection.ensureIndex()。正如您在https://jira.mongodb.org/browse/JAVA-1097中看到的,在Java中(OP询问的)ensureIndex()在Java驱动程序的2.12.0版本中被弃用,而DBCollection.createIndex()是您需要使用的驱动程序。DBCollection.ensureIndex()(链接到版本2.12)在DBCollection Java API中不再可用。
db.collection.createIndex()
DBCollection.createIndex()
y1aodyip3#
java驱动程序(v2.12及更早版本)中的ensureIndex方法将缓存集合上是否存在索引。由于多个客户端可能会更改集合上的索引,该高速缓存值有时可能是错误的,驱动程序将无法创建缺失的索引。出于这个原因,java驱动程序实现了一个具有相同行为的createIndex方法,除了它不会缓存索引状态。对于驱动程序2.12及以上版本,您可以将ensureIndex替换为createIndex,并期待相同的行为,除了性能受到影响,驱动程序以前认为索引已经存在并返回而不向mongo服务器发送createIndex命令。至于为什么他们没有改变行为而不重命名-我不知道。
ensureIndex
createIndex
zpf6vheq4#
自版本〉3.0.0以来已弃用:ensureIndex()现在是db.collection.createIndex()的别名。
ncecgwcz5#
在5.0中删除db.collection.ensureIndex()已替换为db.collection.createIndex()。快照:
5条答案
按热度按时间abithluo1#
**更新2:**最初的答案以及第一次更新错误地引用了Mongo shell文档,而不是Java API。
在Java中,
DBCollection.ensureIndex()
在版本2.12中被弃用,并在版本3.0中被删除。更新日期:
db.collection.ensureIndex()
自版本3.0.0起已弃用。现在是db.collection.createIndex()的别名。
原件:
createIndex()
自1.8起已弃用它用于在集合上创建索引,而
ensureIndex()
在指定的字段上创建索引(如果索引不存在)。此外,当我们执行createIndex()
两次时,第二次执行只会失败,而ensureIndex()
可以多次调用它,它将不会失败关于
ensureIndex()
的行为,他们还改变了一件事,在以前版本的mongodb(版本小于2.6)中,如果现有文档的索引条目超过最大索引键长度,则会创建索引,但Mongodb不会索引此类文档,而在最近的版本中不会创建索引。pvabu6sv2#
在Java API中,
DBCollection.ensureIndex()
已被弃用,与“正常”MongoDB API(在响应时)完全相反。更新:这种不一致性似乎已经得到解决,现在db.collection.createIndex()
在Mongo shell中也取代了db.collection.ensureIndex()
。正如您在https://jira.mongodb.org/browse/JAVA-1097中看到的,在Java中(OP询问的)
ensureIndex()
在Java驱动程序的2.12.0版本中被弃用,而DBCollection.createIndex()
是您需要使用的驱动程序。DBCollection.ensureIndex()
(链接到版本2.12)在DBCollection Java API中不再可用。y1aodyip3#
java驱动程序(v2.12及更早版本)中的
ensureIndex
方法将缓存集合上是否存在索引。由于多个客户端可能会更改集合上的索引,该高速缓存值有时可能是错误的,驱动程序将无法创建缺失的索引。出于这个原因,java驱动程序实现了一个具有相同行为的
createIndex
方法,除了它不会缓存索引状态。对于驱动程序2.12及以上版本,您可以将
ensureIndex
替换为createIndex
,并期待相同的行为,除了性能受到影响,驱动程序以前认为索引已经存在并返回而不向mongo服务器发送createIndex命令。至于为什么他们没有改变行为而不重命名-我不知道。
zpf6vheq4#
自版本〉3.0.0以来已弃用:ensureIndex()现在是db.collection.createIndex()的别名。
ncecgwcz5#
在5.0中删除
db.collection.ensureIndex()
已替换为db.collection.createIndex()
。快照: