我想通过命令导出MongoDB中的所有集合:
mongoexport -d dbname -o Mongo.json
结果是: 没有指定集合!
手册说,如果你不指定一个集合,所有的集合都将被导出。 然而,为什么这行不通呢?
http://docs.mongodb.org/manual/reference/mongoexport/#cmdoption-mongoexport--collection
我的MongoDB版本是2.0.6。
我想通过命令导出MongoDB中的所有集合:
mongoexport -d dbname -o Mongo.json
结果是: 没有指定集合!
手册说,如果你不指定一个集合,所有的集合都将被导出。 然而,为什么这行不通呢?
http://docs.mongodb.org/manual/reference/mongoexport/#cmdoption-mongoexport--collection
我的MongoDB版本是2.0.6。
当前回答
我需要Windows批处理脚本版本。这个帖子很有用,所以我想我也会把我的答案贡献给它。
mongo "{YOUR SERVER}/{YOUR DATABASE}" --eval "rs.slaveOk();db.getCollectionNames()" --quiet>__collections.txt
for /f %%a in ('type __collections.txt') do @set COLLECTIONS=%%a
for %%a in (%COLLECTIONS%) do mongoexport --host {YOUR SERVER} --db {YOUR DATABASE} --collection %%a --out data\%%a.json
del __collections.txt
我在使用set /p COLLECTIONS=<__collections.txt时有一些问题,因此使用了复杂的for /f方法。
其他回答
我意识到这是一个相当老的问题,如果你想要100%的忠实结果(包括索引),mongodb /mongorestore显然是正确的方法。
然而,我需要一个快速而简单的解决方案,它可能在MongoDB的新旧版本之间向前和向后兼容,前提是没有什么特别古怪的事情发生。为此我想知道最初问题的答案。
上面还有其他可接受的解决方案,但这个Unix管道相对较短:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
这将为每个集合生成一个适当命名的.json文件。
注意,数据库名称(“mydatabase”)出现了两次。我假设数据库是本地的,你不需要通过凭据,但这很容易做到与mongo和mongoexport。
注意,我使用grep -v来丢弃系统。索引,因为我不希望旧版本的MongoDB试图解释来自新版本的系统集合。相反,我允许我的应用程序执行它通常的ensureIndex调用来重新创建索引。
如果您想连接远程mongoDB服务器(如mongolab.com),则应该传递连接凭据 如。
mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json
即使在mongo版本4中,也没有办法一次导出所有的集合。将指定的集合从运行在端口27017上的本地MongoDB实例导出到指定的输出文件,您可以使用以下命令:
.\mongoexport.exe——db=xstaging——collection=products——out=c:/xstaging.products.json
如果你可以接受bson格式,那么你可以使用带有相同-d标志的mongodb实用程序。它将以bson格式将所有集合转储到转储目录(默认的,可以通过-o选项更改)。然后可以使用mongorestore实用程序导入这些文件。
对于本地和远程转储和恢复:
为当地
当地的转储
mongodump -d mydb -o ./mongo-backup
当地的恢复
mongorestore -d mydb ./mongo-backup/mydb
为远程
远程转储
mongodump --uri "mongodb+srv://Admin:MYPASS@appcluster.15lf4.mongodb.net/mytestdb" -o ./mongo-backup
远程恢复
mongorestore --uri "mongodb+srv://Admin:MYPASS@appcluster.15lf4.mongodb.net/mytestdb" ./mongo-backup/mytestdb
更新:
如果你正在使用mongo 4.0,你可能会遇到一个快照错误,那么你可以运行这个参数:——forceTableScan。更多信息请参见这里。错误是这样的:
mongodump error reading collection: BSON field 'FindCommandRequest.snapshot' is an unknown field.