我想在脚本中使用mongorestore
命令,但是我很难理解它正在寻找什么样的输入。
使用mongodump
命令后,我最终得到了这棵树:
mydirectory
└── dump
├── mydb1
│ ├── schemas.bson
│ └── schemas.metadata.json
├── mydb2
│ ├── schemas.bson
│ ├── schemas.metadata.json
│ ├── status.bson
│ └── status.metadata.json
└── mydb3
├── schemas.bson
└── schemas.metadata.json
我知道我可以像这样使用mongorestore
命令:
mydirectory$ mongorestore
因为它默认查找dump
目录。
但是,我不明白为什么使用以下命令:
mydirectory/dump$ mongorestore mydb1
给出以下结果:
2018-01-02T14:35:59.823+0100 building a list of dbs and collections to restore from mydb1 dir
2018-01-02T14:35:59.823+0100 don't know what to do with file "mydb1/schemas.bson", skipping...
2018-01-02T14:35:59.823+0100 don't know what to do with file "mydb1/schemas.metadata.json", skipping...
2018-01-02T14:35:59.823+0100 done
此外,当我使用-d
标志指定要还原的数据库时,它仅在我指定此数据库所在的目录时才有效,例如:
mydirectory/dump$ mongorestore mydb1 -d mydb1
(我希望这个命令在没有-d
标志的情况下工作)
使用(或不使用)mongorestore
标志时,-d
期望使用哪种文件或目录?
答案 0 :(得分:1)
mongorestore
期望dump
文件夹包含具有数据库名称的子文件夹,该数据库名称又包含BSON转储和元数据。您看到的错误是因为它没有找到包含BSON /元数据文件的子目录。
不是通过进入dump
目录进行恢复,而是使用--nsInclude
选项(MongoDB 3.4中的新增功能)更好。有关详细信息,请参阅nsInclude documentation。
选项--nsInclude
要求您以<database>.<collection>
的形式提供命名空间。例如,要还原test
数据库:
mongorestore --nsInclude "test.*"
恢复test
数据库中的test
集合:
mongorestore --nsInclude "test.test"
确保您从dump
目录的父级执行还原,而不是从其内部执行还原。