使用MongoDB的Java中的createIndex()
和ensureIndex()
有什麼區別?我搜索了這個,但沒有得到滿意的答案。java中使用mongodb的createIndex()和ensureIndex()之間的區別
回答
更新2: 最初的答案以及第一次更新錯誤地引用了Mongo shell文檔,而不是Java API。
在Java中,DBCollection.ensureIndex()
已在版本2.12中棄用,並在版本3.0中刪除。 DBCollection.createIndex()
是應該使用的。
更新:
db.collection.ensureIndex()
,因爲3.0.0版本已經過時了。
現在是db.collection.createIndex()的別名。
原文:
createIndex()
是deprecated since 1.8
它被用來在集合上創建索引,而ensureIndex()
如果指數不存在創建指定場的索引。此外,當我們執行createIndex()
兩次第二次執行將只失敗而與ensureIndex()
你可以多次調用它,它會不會失敗
還有一件事,他們改變了關於ensureIndex()
行爲,在以前的版本如果現有文檔的索引條目超過最大索引關鍵字長度,則會創建索引,但Mongodb 不會索引這樣的文檔,而在最近的版本中,將不會創建索引。
在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。
順便說一句,我不能評論@ sol4me的錯誤答案,由於缺乏聲譽,也沒有恢復我錯誤地刪除的原件回答,或爲此事做任何其他事情。 :-( – 2014-10-16 11:26:25
)如果你認爲你是對的,發表寫得很好的答案,而不是那種無用的答案,這將被肯定刪除。 – Dici 2014-10-16 11:26:45
對不起,但我的答案是什麼沒用? @ sol4me錯了,在Java API中,你實際上必須使用createIndex(),我甚至引用了相應的JIRA問題,我在這裏與MongoDB開發人員澄清了這一點... 如果我有答覆那些刪除我的答案的人,我會編輯它,而不是把所有的東西放在那裏,以顯示它是如何被刪除的。事實是,在我甚至與開發者討論事情的努力之後,這對我來說都是非常敵對的,所以我可以給出一個正確的答案 – 2014-10-16 11:30:14
java驅動程序(v2.12及更早版本)中的ensureIndex
方法將緩存索引是否存在於集合中。由於多個客戶端可能會更改集合上的索引,因此緩存值可能有時會出錯,並且驅動程序無法創建缺少的索引。
由於這個原因,java驅動程序執行createIndex
方法具有相同的行爲,但它不會緩存索引狀態。
With drivers 2。12和更高版本,您可以用createIndex
替換ensureIndex
,並期望相同的行爲,但驅動程序以前認爲該索引已存在並且未將createIndex命令發送到mongo服務器時返回的性能命中除外。
至於爲什麼他們沒有改變沒有重命名的行爲 - 我不知道。
- 1. MongoDB Java API:com.mongodb.DBCollection.Save()和com.mongodb.DBCollection.Insert()之間的區別?
- 2. Apache Spark SQL和MongoDB之間的區別?
- 3. MongoDB db.getCollection.find和db.tablename.find之間的區別?
- 4. Java中= +和+ =之間的區別?
- 5. Java和C#和.NET之間的區別
- 6. Mongodb ensureIndex
- 7. java類和jar之間的區別
- 8. Java Point,getX()和point.x之間的區別
- 9. Java - javax.crypto.Mac和javax.crypto.Cipher之間的區別?
- 10. scala和java枚舉之間的區別
- 11. Authenticode,SPC和Java CodeSign之間的區別?
- 12. '。'之間的區別和「。」 in java
- 13. objective-c和java之間的區別
- 14. Apache Struts和Java EE之間的區別?
- 15. Short.parseShort和Short.value之間的Java區別
- 16. MongoDB的索引(ensureIndex)
- 17. 使用@OneToMany和@ManyToMany之間的區別
- 18. 使用Trace和TraceSource之間的區別
- 19. MongoDb:$ push/$ addtoset之間的區別
- 20. MongoDB中的cursor.count()和cursor.size()之間的區別
- 21. MongoDB中的db.runCommand({getlasterror:1,fsync:true})和db.runCommand({getlasterror:1})之間的區別?
- 22. JSP中的Java表達式和Java腳本之間的區別
- 23. MongoDB中「id」和「_id」字段之間的區別
- 24. mongodb中存儲數組和新數組之間的區別
- 25. MongoDB中replaceOne()和updateOne()之間的區別是什麼?
- 26. Java通用參數之間的區別
- 27. '+ ='和'= +'之間的區別?
- 28. {!!之間的區別!!}和{{}}
- 29. ==和case之間的區別?
- 30. '#','%'和'$'之間的區別
MongoDb文檔其實非常好。你試過了嗎? – Jayan 2014-09-22 07:42:26