我想通过命令导出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
22 回答
对于像我这样的懒人,我使用mongodump它更快:
并且“恢复/导入”,我使用(来自directory_backup / dump /):
使用此解决方案,您不需要逐个添加每个集合并导出 . 只需指定数据库即可 . 我建议不要使用mongodump / mongorestore作为 big data storages . 它非常慢,一旦你超过10 / 20GB的数据,它可能需要数小时才能恢复 .
我为此编写了bash脚本 . 只需运行2个参数(数据库名称,dir来存储文件) .
请告诉我们您安装Mongo DB的位置? (在Ubuntu或Windows中)
For Windows:
在导出之前,您必须在cmd提示符下连接到Mongo DB,并确保能够连接到本地主机 .
现在打开一个新的cmd提示符并执行以下命令,
mongodump --db数据库名称 - 要保存的路径
例如:mongodump --db mydb --out c:\ TEMP \ op.json
访问https://www.youtube.com/watch?v=hOCp3Jv6yKo了解更多详情 .
For Ubuntu:
登录到安装了Mongo DB的终端,并确保能够连接到Mongo DB .
现在打开一个新终端并执行以下命令,
mongodump -d数据库名称-o要保存的文件名
例如:mongodump -d mydb -o output.json
按照以下步骤从服务器创建mongodump并将其导入另一台具有用户名和密码的服务器/本地计算机
使用mongodump导出所有集合使用以下命令
mongodump -d database_name -o directory_to_store_dumps
要还原,请使用此命令
如果您对bson格式没问题,则可以使用具有相同-d标志的mongodump实用程序 . 它会将所有集合转储到转储目录(默认情况下,可以通过-o选项更改)以bson格式转储 . 然后,您可以使用mongorestore实用程序导入这些文件 .
您可以使用
mongo --eval 'printjson(db.getCollectionNames())'
获取集合列表,然后对所有集合执行mongoexport . 这是ruby中的一个例子我需要Windows批处理脚本版本 . 这个帖子很有用,所以我想我也会给出答案 .
我有一些问题使用
set /p COLLECTIONS=<__collections.txt
,因此是错综复杂的for /f
方法 .如果需要,可以将所有集合导出到csv而不指定
--fields
(将导出所有字段) .从http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/运行此bash脚本
我在尝试了许多复杂的例子后发现,非常简单的方法对我有效 .
我只想从本地转储数据库并将其导入远程实例:
在本地机器上:
然后我把我的转储scp到我的服务器机器:
然后从转储的父目录简单地说:
并导入数据库 .
假设mongodb服务正在运行 .
如果要将所有集合转储到所有数据库中(这是对原始提问者意图的扩展解释),请使用
所有数据库和集合都将在“当前”位置的名为“dump”的目录中创建
您可以使用以下命令创建zip文件 . 它将创建提供的数据库的zip文件 . 您可以稍后在您的mongo DB中导入以下zip文件 .
如果你想连接像mongolab.com这样的远程mongoDB服务器,你应该传递连接凭证,例如 .
以前的答案解释得很清楚,如果您正在处理远程密码保护的数据库,我正在添加我的答案
这是恢复导出数据库时对我有用的:
mongorestore -d 0 ./0 --drop
其中./contained导出的bson文件 . 请注意,
--drop
将覆盖现有数据 .我意识到这是一个相当古老的问题,如果你想要100%忠实的结果,包括索引,mongodump / mongorestore显然是正确的方法 .
但是,我需要一个快速而肮脏的解决方案,可能在旧版本和新版本的MongoDB之间进行向前和向后兼容,前提是没有什么特别古怪的继续为此我想要原始问题的答案 .
上面还有其他可接受的解决方案,但是这个Unix管道相对简短而且很甜:
这会为每个集合生成一个适当命名的
.json
文件 .请注意,数据库名称("mydatabase")出现两次 . 我需要传递凭据,但使用
mongo
和mongoexport
很容易 .请注意,我正在使用
grep -v
丢弃system.indexes
,因为我不允许我的应用程序进行通常的ensureIndex
调用来重新创建索引 .如果你想使用mongoexport和mongoimport从数据库导出/导入每个集合,我认为this utility可能对你有所帮助 . 我几次使用类似的实用程序;
如果要备份服务器上的所有dbs,而不必担心调用dbs,请使用以下shell脚本:
这使用mongodump实用程序,如果没有指定,它将备份所有数据库 .
你可以将它放在你的cronjob中,它只会在mongod进程运行时运行 . 如果不存在,它还将创建备份目录 .
每个数据库备份都写入单个目录,因此您可以从全局转储中还原单个数据库 .
您已经可以使用像Robomongo或Mongochef这样的GUI进行此类操作 .
打开连接
启动服务器
打开新的命令提示符
出口:
mongo/bin> mongoexport -d webmitta -c domain -o domain-k.json
进口:
mongoimport -d dbname -c newCollecionname --file domain-k.json
哪里
要以JSON格式导出,请按照您可以看到的命令执行此操作 .