如何重新索引默认的Mongo索引?

时间:2012-07-17 21:25:58

标签: mongodb indexing mongodb-indexes

好吧,我正在修复一个拥有1亿条记录的MongoDB集合。以前的开发人员用真正错误的东西覆盖默认的_id。现在,当我修复它时,如何重新生成_id索引?除了mongoRestore,还有更快的方法吗?


这是我的更新程序:

1)将数据库从原始数据库复制到另一个数据库。

2)删除所有记录的_id。

3)为所有记录重新生成_id(这就是我不知道该怎么做)

4)使用新的_id将集合复制回原始数据库(或者另一种方法是从新的/ temp数据库中创建mongoDump,然后将文件发送到原始数据库,MongoRestore ie(然后每个记录都会有新的_id。这种方式可行,但看起来更慢。)

1 个答案:

答案 0 :(得分:1)

默认的MongoDB'_id'值是在首次插入文档时由客户端的MongoDB驱动程序生成的。它是使用当前时间,运行客户端的计算机的主机名,客户端的进程ID以及用于通过同一进程区分多个操作的递增值生成的。

有关详细信息,请参阅http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification

因此,除非您碰巧将上面提到的所有信息存储为文档中的条目,否则您无法重建原始默认的MongoDB'_id'值。

此外,'_ id'字段是不可变的 - 它无法更改。我不确定以前的开发人员是如何首先覆盖_id字段的 - 我最好的猜测是他获取了文档,更改了_id字段的值,删除了旧文件,并插入了新文件。

如果您执行'mongodump'后,除了'_id'字段之外的文档内容没有改变,那么获取数据的最快方法就是恢复该转储文件。

如果您的文档内容已经更改,并且您想要保留更改,那么您需要执行与之前的开发人员相反的操作:获取集合中的每个文档,使用本机驱动程序的工具创建一个新的ObjectID,删除旧文档并将数据保存为带有新_id的新文档。