Mongodb Mongorestore到另一个数据库

Mongodb Mongorestore到另一个数据库,mongodb,mongorestore,Mongodb,Mongorestore,在MongoDB中,是否可以转储数据库并将内容恢复到其他数据库?例如: mongodump --db db1 --out dumpdir mongorestore --db db2 --dir dumpdir 但它不起作用。以下是错误消息: 生成要从dumpdir还原的集合列表 不知道如何处理子目录“dumpdir/db1”,正在跳过 完成 您需要实际指向上一个转储的输出目录中的目录: mongorestore -d db2 dumpdir/db1 并且通常只是作为位置参数,而不是使用-di

在MongoDB中,是否可以转储数据库并将内容恢复到其他数据库?例如:

mongodump --db db1 --out dumpdir
mongorestore --db db2 --dir dumpdir
但它不起作用。以下是错误消息:

生成要从dumpdir还原的集合列表

不知道如何处理子目录“dumpdir/db1”,正在跳过

完成


您需要实际指向上一个转储的输出目录中的目录:

mongorestore -d db2 dumpdir/db1
并且通常只是作为位置参数,而不是使用
-dir
,这仅在“不在位置”即“在参数列表的中间”时才需要

p、 用于存档备份文件(使用mongorestore v3.4.10)


除了Blakes Seven的答案之外,如果您的数据库使用身份验证,我使用
--uri
选项实现了这一点,该选项需要最新的mongo版本(>3.4.6):


谢谢大家!@布莱克斯七号

添加Docker注释: 容器名称可以与容器ID互换

(假定已验证,假定命名容器=my_db和new_db)

转储:

docker exec -it my_db bash -c "mongodump --uri mongodb://db:password@localhost:27017/my_db --archive --gzip | cat > /tmp/backup.gz"
docker cp my_db:/tmp/backup.gz c:\backups\backup.gz
docker cp .\backup.gz new_db:/tmp
docker exec -it new_db bash -c "mongorestore --uri mongodb://db:password@localhost:27017/new_db --nsFrom 'my_db.*' --nsTo 'new_db.*' --gzip --archive=/tmp/backup.gz"
复制到工作站:

docker exec -it my_db bash -c "mongodump --uri mongodb://db:password@localhost:27017/my_db --archive --gzip | cat > /tmp/backup.gz"
docker cp my_db:/tmp/backup.gz c:\backups\backup.gz
docker cp .\backup.gz new_db:/tmp
docker exec -it new_db bash -c "mongorestore --uri mongodb://db:password@localhost:27017/new_db --nsFrom 'my_db.*' --nsTo 'new_db.*' --gzip --archive=/tmp/backup.gz"
复制到新容器(表单备份文件夹):

docker exec -it my_db bash -c "mongodump --uri mongodb://db:password@localhost:27017/my_db --archive --gzip | cat > /tmp/backup.gz"
docker cp my_db:/tmp/backup.gz c:\backups\backup.gz
docker cp .\backup.gz new_db:/tmp
docker exec -it new_db bash -c "mongorestore --uri mongodb://db:password@localhost:27017/new_db --nsFrom 'my_db.*' --nsTo 'new_db.*' --gzip --archive=/tmp/backup.gz"
从容器tmp文件夹还原:

docker exec -it my_db bash -c "mongodump --uri mongodb://db:password@localhost:27017/my_db --archive --gzip | cat > /tmp/backup.gz"
docker cp my_db:/tmp/backup.gz c:\backups\backup.gz
docker cp .\backup.gz new_db:/tmp
docker exec -it new_db bash -c "mongorestore --uri mongodb://db:password@localhost:27017/new_db --nsFrom 'my_db.*' --nsTo 'new_db.*' --gzip --archive=/tmp/backup.gz"

非常感谢。这起作用了。我认为在使用
-d
选项时必须指定转储文件夹中的子目录,而在不使用
-d
时必须指定转储文件夹本身。就是这样。你能为归档转储(--gzip--archive)提供解决方案吗?@SergioRykov似乎这是一个已知的错误,将在3.3.10中解决。目前还没有人支持它。@PhiliiIpp看起来现在支持它了。老实说--nsInclude--nsExclude--nsFrom和--nsTo看起来过于复杂了。我已经用--archive和--gzip完成了一个备份,我想在另一个数据库中恢复这个备份。我该怎么做?我想我需要nsFrom和nsTo,但不需要nsInclude和nsExclude,因为我不想排除某些内容。应该恢复整个备份,并且只更改数据库的名称。我已经测试了此解决方案,它可以工作,唯一的问题是DBREF仍然指向初始数据库条目,而不是“nsTo”数据库条目。虽然此代码可以回答此问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。