Mongodb MongoRestore,跳过n个第一个文档

Mongodb MongoRestore,跳过n个第一个文档,mongodb,Mongodb,我正在恢复一个大型mongo数据库(90 GB)。我使用的是mongorestore,在恢复过程中大约70..90%的时间它都会无声地失败。在启动mongorestore时,是否有办法跳过转储文件的前n个文档?。 我知道有一个过滤器选项,你可以给一个过滤器查询,但它没有帮助 如果我再次尝试恢复整个备份,由于重复索引错误,需要花费很多时间。我再次尝试恢复数据库,但再次失败(由于套接字异常) 由于mongorestore似乎按顺序处理bson转储,我想知道是否有一种方法可以说:“跳过转储的1'234

我正在恢复一个大型mongo数据库(90 GB)。我使用的是mongorestore,在恢复过程中大约70..90%的时间它都会无声地失败。在启动mongorestore时,是否有办法跳过转储文件的前n个文档?。 我知道有一个过滤器选项,你可以给一个过滤器查询,但它没有帮助

如果我再次尝试恢复整个备份,由于重复索引错误,需要花费很多时间。我再次尝试恢复数据库,但再次失败(由于套接字异常)

由于mongorestore似乎按顺序处理bson转储,我想知道是否有一种方法可以说:“跳过转储的1'234'567个第一个文档,然后恢复其余的”

我只有一大套。我已经在不同的地方打破了垃圾场,但似乎还不够。告诉mongorestore跳过已恢复的文档并继续进行会更容易


谢谢

据我所知,在执行
Mongordore
时,没有办法告诉MongoDB跳过n个文档,但是您可以利用
--filter
选项来进行模拟。假设您使用的是objectID或具有某种序列的
\u id
,则可以对集合进行查询,以查找第n个文档的
\u id
。大概是这样的:

db.collection.find({}, { "_id" : 1 }).skip(n-1).limit(1);
mongorestore --filter '{"_id": { $gt : "<ID>" }}'
然后,您可以将此
\u id
作为参数传递给
--filter
选项,告诉它仅还原大于此
\u id
的所有文档。大概是这样的:

db.collection.find({}, { "_id" : 1 }).skip(n-1).limit(1);
mongorestore --filter '{"_id": { $gt : "<ID>" }}'
mongorestore——过滤器“{”\u id”:{$gt:“}”
如果要在还原之前删除数据库,可以在上面的命令中添加
--drop
选项


这应该只还原id大于第n个文档id的文档,有效地跳过集合中的前n个文档。

您是打算跳过前n个文档,还是愿意还原整个备份?另外,您的数据库中有多少个集合?我想你可以编写一个脚本,对每个集合进行备份,然后逐个恢复。我已经将转储文件分成了几个部分。请参见上面的编辑。如果没有办法告诉mongorestore跳过文档hanks,我会继续这样做,我会试试。AFAK_id是由时间戳和其他东西生成的,因此它应该可以工作。