我想通过命令导出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方法。
其他回答
如果你想备份服务器上的所有dbs,而不用担心调用dbs,使用下面的shell脚本:
#!/bin/sh
md=`which mongodump`
pidof=`which pidof`
mdi=`$pidof mongod`
dir='/var/backup/mongo'
if [ ! -z "$mdi" ]
then
if [ ! -d "$dir" ]
then
mkdir -p $dir
fi
$md --out $dir >/dev/null 2>&1
fi
这将使用mongodb实用程序,如果没有指定,该实用程序将备份所有db。
你可以把它放在你的cronjob中,它只会在mongod进程正在运行时运行。如果不存在备份目录,它还将创建备份目录。
每个DB备份都被写入一个单独的目录,因此您可以从全局转储恢复各个DB。
您可以使用以下命令创建zip文件。它将创建数据库{dbname}的zip文件。稍后您可以在mongo DB中导入以下zip文件。
Window filepath=C:\Users\Username\mongo
mongodump --archive={filepath}\+{filename}.gz --gzip --db {dbname}
之前的答案解释得很好,我添加了我的答案,以帮助您处理远程密码保护数据库
mongodump --host xx.xxx.xx.xx --port 27017 --db your_db_name --username your_user_name --password your_password --out /target/folder/path
以下是恢复导出数据库时对我有效的方法:
Mongorestore -d 0 ./0——drop
其中。/包含导出的bson文件。注意——drop将覆盖现有数据。
如果你可以接受bson格式,那么你可以使用带有相同-d标志的mongodb实用程序。它将以bson格式将所有集合转储到转储目录(默认的,可以通过-o选项更改)。然后可以使用mongorestore实用程序导入这些文件。