我正在恢复一个大的mongo数据库(90 GB)。我正在使用mongorestore,它在70%-90%的恢复过程中无声地失败。有没有办法在启动mongorestore时跳过转储的n个第一个文件? 我知道有一个过滤器选项,您可以在其中提供过滤器查询,但它没有帮助。
如果我尝试再次恢复整个备份,由于重复的索引错误,需要花费很多次。我试图再次恢复数据库,但它再次失败(由于套接字异常)
由于mongorestore似乎顺序处理bson转储,我想知道是否有办法说:"只需跳过1' 234' 567转储的第一个文件,然后恢复其余文件"
我只有一个大集合。我已经在不同的部分打破了转储,但似乎还不够。告诉mongorestore跳过已恢复的文档并继续下去会更容易。
谢谢
答案 0 :(得分:2)
据我所知,在执行mongorestore
时,没有办法告诉MongoDB跳过n个文档,但你可以利用--filter
选项来做一些模仿这个的事情。假设您正在使用ObjectIds或具有某种序列的_id
,您可以对集合执行查询以查找第n个文档的_id
。像这样:
db.collection.find({}, { "_id" : 1 }).skip(n-1).limit(1);
然后,您可以将此_id
作为参数传递给--filter
选项,告诉它只恢复大于此_id
的所有文档。像这样的东西:
mongorestore --filter '{"_id": { $gt : "<ID>" }}'
如果要在还原之前删除数据库,可以在上面的命令中添加--drop
选项。
这应该只恢复_id
大于第n个文档的文档,有效地跳过集合中的前n个文档。