Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何重新索引默认Mongo索引?_Mongodb_Indexing_Mongodb Indexes - Fatal编程技术网

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

Mongodb 如何重新索引默认Mongo索引?,mongodb,indexing,mongodb-indexes,Mongodb,Indexing,Mongodb Indexes,嗯,我正在修复一个MongoDB收藏,它有1亿条记录。以前的开发人员用一些真正错误的东西覆盖了默认的_id。现在,当我修复它时,如何重新生成_id索引?除了mongoRestore,还有更快的方法吗 以下是我的更新过程: 1) 将数据库从原始数据库复制到另一个数据库 2) 删除所有记录的_id 3) 为所有记录重新生成_id(我不知道该怎么做) 4) 使用新的_id将集合复制回原始数据库(或者另一种方法是从新的/temp数据库生成mongoDump,然后将文件发送到原始数据库MongoRest

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


以下是我的更新过程:

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

2) 删除所有记录的_id

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


4) 使用新的_id将集合复制回原始数据库(或者另一种方法是从新的/temp数据库生成mongoDump,然后将文件发送到原始数据库MongoRestore,即(然后每个记录都将具有新的_id。这种方法可以工作,但速度似乎较慢)

当文档首次插入时,客户端的MongoDB驱动程序将生成默认MongoDB“\u id”值。该值使用当前时间、客户端运行的计算机的主机名、客户端的进程id以及用于区分同一进程的多个操作的递增值生成

有关详细信息,请参阅

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

此外,“\u id”字段是不可变的——它不能更改。我不确定以前的开发人员首先是如何重写_id字段的——我最好的猜测是他获取了文档,更改了_id字段的值,删除了旧的,然后插入了新的

如果自执行“mongodump”后,文档中除“\u id”字段以外的内容没有更改,那么恢复数据的最快方法就是恢复该转储文件


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

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

有关详细信息,请参阅

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

此外,“\u id”字段是不可变的——它不能更改。我不确定以前的开发人员首先是如何重写_id字段的——我最好的猜测是他获取了文档,更改了_id字段的值,删除了旧的,然后插入了新的

如果自执行“mongodump”后,文档中除“\u id”字段以外的内容没有更改,那么恢复数据的最快方法就是恢复该转储文件


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

为什么你认为你必须重新生成吗?嗯..因为_id被一个importer散列值覆盖,导致冲突。所以,我需要删除旧的。然后用Mongo的默认方式还原一个。你如何还原_id值?如果你正在读取每个文档,然后更新_id,你不需要重建索引。如果如果要还原到备份中的值,如何执行此操作取决于备份的方式。这就是我想知道的。如何还原默认情况下由Mongo生成的_id值。以下是我的步骤。(请参阅上文)为什么您认为必须重新生成?嗯..因为_id被importer散列值覆盖,导致冲突。因此,我需要删除旧的。然后用Mongo的默认方式还原一个。您如何还原_id值?如果您正在读取每个文档,然后更新_id,则无需重建索引。如果您想还原到备份中的值,那么如何还原取决于备份的方式。这就是我想知道的。如何还原默认情况下由Mongo生成的_id值。以下是我的步骤。(参见上文)