我想通过命令导出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。
当前回答
即使在mongo版本4中,也没有办法一次导出所有的集合。将指定的集合从运行在端口27017上的本地MongoDB实例导出到指定的输出文件,您可以使用以下命令:
.\mongoexport.exe——db=xstaging——collection=products——out=c:/xstaging.products.json
其他回答
一些选项现在已弃用,在4.4.5版本中,我是这样做的
mongodump --archive="my-local-db" --db=my
mongorestore --archive="my-local-db" --nsFrom='my.*' --nsTo='mynew.*'
阅读更多关于恢复:https://docs.mongodb.com/database-tools/mongorestore/
在尝试了许多复杂的例子后,我发现非常简单的方法对我有用。
我只是想从本地转储一个db,并将它导入到一个远程实例:
在本地机器:
mongodump -d databasename
然后我scp了我的转储到我的服务器机器:
scp -r dump user@xx.xxx.xxx.xxx:~
然后从转储的父目录简单地:
mongorestore
然后导入数据库。
当然,假设mongodb服务正在运行。
我把所有的收集倾倒在robo3t上。 我在vagrant/homestead上运行下面的命令。这是我的工作
mongodump --host localhost --port 27017 --db db_name --out db_path
我意识到这是一个相当老的问题,如果你想要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调用来重新创建索引。
之前的答案解释得很好,我添加了我的答案,以帮助您处理远程密码保护数据库
mongodump --host xx.xxx.xx.xx --port 27017 --db your_db_name --username your_user_name --password your_password --out /target/folder/path