使用-d标志时mongorestore需要什么样的文件或目录?

时间:2018-01-02 13:41:25

标签: mongodb

我想在脚本中使用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期望使用哪种文件或目录?

1 个答案:

答案 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目录的父级执行还原,而不是从其内部执行还原。