2014-03-12 38 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()将不会使用新选项重建现有索引。