如果我在Mongo中创建一个集合,并且在将文档添加到此集合后,我使用ensureIndex()
在此集合中的文档上创建一个索引,如果我删除该集合,请执行此操作我必须重新创建索引吗?
答案 0 :(得分:37)
简答:是的。
收集下降时索引正在下降。您需要重新创建索引。
您可能希望不删除集合,但删除db.collection_name.remove({})
中的所有项目。这将需要更多的资源,但留下您的索引。实际上它需要删除所有索引数据。这就是为什么在此之后删除整个集合并重新创建索引更为可取的原因。
答案 1 :(得分:12)
我刚刚在一个包含10个索引的集合上执行此操作,并且不想手动重新创建它们。你可以完成一个drop并使用mongo shell中的以下三行重新创建索引:
var indexes = db.collection.getIndexKeys().splice(1)
db.collection.drop();
indexes.forEach(function(el){ db.collection.ensureIndex(el, {background:true}); })
这不足以处理唯一或稀疏索引,但我认为通过使用getIndexes()的输出来支持相当容易。我不需要那个,所以我没有这样做。
splice(1)只是为了删除_id上的索引,因为它将被自动创建。
答案 2 :(得分:2)
删除集合会丢弃所有索引,因为您怀疑,因此当您重新创建集合时(显式或通过添加新文档隐式),您将需要重新创建您需要存在的任何索引。 _id
上的默认索引是自动为您创建的。