我想通过命令导出MongoDB中的所有集合:

mongoexport -d dbname -o Mongo.json

结果是: 没有指定集合!

手册说,如果你不指定一个集合,所有的集合都将被导出。 然而,为什么这行不通呢?

http://docs.mongodb.org/manual/reference/mongoexport/#cmdoption-mongoexport--collection

我的MongoDB版本是2.0.6。


当前回答

我意识到这是一个相当老的问题,如果你想要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调用来重新创建索引。

其他回答

如果你可以接受bson格式,那么你可以使用带有相同-d标志的mongodb实用程序。它将以bson格式将所有集合转储到转储目录(默认的,可以通过-o选项更改)。然后可以使用mongorestore实用程序导入这些文件。

如果您正在处理远程数据库,您可以尝试这些命令,前提是您不介意输出是BSON

1. 转储为gzip存档

mongodump --uri="mongodb://YOUR_USER_ID:YOUR_PASSWORD@YOUR_HOST_IP/YOUR_DB_NAME" --gzip --archive > YOUR_FILE_NAME

2. 还原(将数据库从一个数据库复制到另一个数据库)

mongorestore --uri="mongodb://$targetUser:$targetPwd@$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive

按照以下步骤从服务器创建一个mongodb,并将其导入另一台服务器/本地机器,该服务器/本地机器具有用户名和密码

1. mongodump -d dbname -o dumpname -u username -p password
2. scp -r user@remote:~/location/of/dumpname ./
3. mongorestore -d dbname dumpname/dbname/ -u username -p password

通过这个命令导出整个Mongo DB

mongoexport –db database_name –collection collection_name –out path_or_filename.json

如果您想连接远程mongoDB服务器(如mongolab.com),则应该传递连接凭据 如。

mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json