在MongoDB中,如果删除了集合,索引也会自动删除?

raf*_*ian 29 indexing collections document mongodb

如果我在Mongo中创建一个集合,并且在将文档添加到此集合之后,我使用ensureIndex()在该集合中的文档上创建一个索引,例如,如果我删除该集合,是否必须重新创建索引?

lig*_*lig 41

简短回答:是的.

收集下降时索引正在下降.您需要重新创建索引.

您可能希望不删除集合,但删除其中的所有项目db.collection_name.remove({}).这将需要更多的资源,但留下您的索引.实际上它需要删除所有索引数据.这就是为什么更倾向于删除整个集合并在此之后重新创建索引.

  • `remove()`在大集合上可能需要很长时间.`drop()`要快得多,但是已经注意到了删除所有索引的缺点. (4认同)

sha*_*dfc 13

我只是在一个包含10个索引的集合上执行此操作,并且不想手动重新创建它们.您可以使用mongo shell中的以下三行完成drop并重新创建索引:

var indexes = db.collection.getIndexKeys().splice(1)
db.collection.drop();
indexes.forEach(function(el){ db.collection.ensureIndex(el, {background:true}); })
Run Code Online (Sandbox Code Playgroud)

这不足以处理唯一或稀疏索引,但我认为通过使用getIndexes()的输出来支持相当容易.我不需要那个,所以我没有这样做.

splice(1)只是为了删除_id上的索引,因为它将被自动创建.