MongoDB ensureIndex 是不是执行重建?

Posted

技术标签:

【中文标题】MongoDB ensureIndex 是不是执行重建?【英文标题】:Does MongoDB ensureIndex perform a rebuild?MongoDB ensureIndex 是否执行重建? 【发布时间】:2014-04-17 02:37:29 【问题描述】:

我正在阅读 MongoFB 文档。 在这个网址 http://docs.mongodb.org/manual/tutorial/build-indexes-on-replica-sets/ 我读 "使用 mongo shell 中的 ensureIndex() 或驱动程序中的类似方法创建新索引。 此操作将在此 mongod 实例上创建或重建索引"

我明白了吗? 如果索引已经存在,mongoDB 是否会执行重建?

因此,与“reIndex()”的区别在于 reIndex() 对集合的所有索引执行重建。 对吗?

【问题讨论】:

我认为这可能是一个英文错误,如果索引已经存在,或者至少应该存在,则 ensureIndex() 注册一个空操作 【参考方案1】:

我认为这要么是一个英语错误,要么是在谈论您是否要在副本集上重建索引,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() 不会使用新选项重建现有索引。

【讨论】:

以上是关于MongoDB ensureIndex 是不是执行重建?的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb:啥时候调用ensureIndex?

MongoDB中喜欢的EnsureIndex

MongoDB 学习笔记之 索引

MongoDB创建索引

MongoDB索引的基本用法

mongodb索引