2014-03-12 80 views
0

我正在閱讀MongoFB文檔。 在此URL http://docs.mongodb.org/manual/tutorial/build-indexes-on-replica-sets/ 我讀 「創建蒙戈外殼使用ensureIndex()可比方法在驅動程序中的新的索引,或。 此操作將創建或重建這個mongod的實例指數」MongoDB ensureIndex是否執行重建?

我明白嗎? 如果索引已經存在,mongoDB是否執行重建?

所以與「reIndex()」的區別在於,reIndex()在集合的所有索引上執行重建。 這是正確的嗎?

+1

我認爲這可能是英文錯誤,如果索引已經存在,ensureIndex()會註冊一個no-op,或者至少應該 – Sammaye

回答

2

我認爲,或者是一個英文錯誤或談論,如果你在副本重建索引設置兩種方式爲ensureIndex()文件明確規定:

http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/#behaviors(一個從這裏鏈接到:http://docs.mongodb.org/manual/tutorial/build-indexes-on-replica-sets/#build-the-index

如果您同時調用多個具有相同索引規範的ensureIndex()方法,則只有第一個操作會成功,所有其他操作將不起作用。

因此,再次調用它不應導致重建,除非您正在重建索引。

如果要重建索引,你必須先刪除它,然後重新運行ensureIndex()

要添加或更改指數期權則必須使用dropIndex()方法刪除索引,併發出另一個ensureIndex()用新選項操作。

如果使用一組選項創建索引,然後在不首先刪除索引的情況下使用相同索引字段和不同選項發出ensureIndex()方法,那麼ensureIndex()將不會使用新選項重建現有索引。