支持从mongodb 3.4开始

$ mongorestore --version
mongorestore version: r3.4.0
git version: 3cc9a07766fb55de63e81a13e72f3c5a7c07f477
Go version: go1.7.4
   os: darwin
   arch: amd64
   compiler: gc
OpenSSL version: OpenSSL 1.0.2j  26 Sep 2016

通过mongorestore --help来查看相关选项变化:

  • 新增命令行选项
--nsExclude=<ns-pattern>  exclude matching namespaces
--nsInclude=<ns-pattern>  include matching namespaces
--nsFrom=<ns-pattern>     rename matching namespaces, must have matching nsTo
--nsTo=<ns-pattern>       rename matched namespaces, must have matching nsFrom

--dryRun                  recommended with verbosity

注:--nsExclude--nsInclude都可以多次出现,也可以结合使用,--nsInclude会在--nsExclude之前处理。在命名空间模式中,支持*作为通配符。--nsFrom--nsTo必须成对出现。

  • deprecated选项:
--db, --collection, --excludeCollection, --excludeCollectionsWithPrefix

使用示例

# 将数据库app重命名为app-dev,所有的表名称保持不变
mongodump --db app --archive | mongorestore --nsFrom='app.*' \
                                            --nsTo='app-dev.*' --archive
# 将远程数据库同步到本地则可以用类似方式来完成,使用--gzip来减少网络数据传输
ssh dev 'mongodump --db app --archive --gzip' | mongorestore \
                    --nsFrom='app.*' --nsTo='app-dev.*' --archive --gzip

# 将数据库app中带有user前缀的表都转移到app-dev中,功能真是太强大了
mongodump --db app --archive | mongorestore --nsInclude='*.user*' \
                           --nsFrom='app.*' --nsTo='app-dev.*' --archive

# 使用匹配变量实现更复杂的功能,用双$符号的形式'$var$'来赋值匹配变量
# --nsFrom '$db$.user$stuff$' --nsTo 'user.$stuff$.$db$'
# --nsFrom 'test_$stack$.$coll$' --nsTo 'recover.$stack$.$coll$'
mongodump --db app --archive | mongorestore --nsInclude='*.user*' \
      --nsFrom='$db$.use$stuff$' --nsTo='$db$xxx.$stuff$.user' --archive
# 结果:app.user和app.user2 => appxxx.r.user和app.r2.user
# 功能太强大,慢慢学习吧

参考链接