在工作中,我一般使用Robomongo-1.0去连接mongodb的,据我所知,但是这些工具一般都没有导入导出的功能。所以想要导点数据比较麻烦,后来查了一下mongodb自带了两个工具用来完成这些功能。
1、mongoexport用来导出
mongoexport可以把collection导出成json或csv文件,默认是导出json格式。
语法:mongoexport -d db -c collection -o file --type json/csv -f field
参数说明:
-d :数据库名
-c :collection名
-o :输出的文件名
–type : 输出的格式(可以省略)
-f :输出的字段,如果-type为csv,则需要加上-f “字段名”
示例:
./mongoexport -d test_001 -c operation_log -o /usr/back/log.json
2、mongoimport用来数据导入
语法:mongoimport -d db -c collection --file filename --headerline --type json/csv -f field
参数说明:
-d :数据库名
-c :collection名
–type :导入的格式,默认json(可以省略)
-f :导入的字段名
–headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
–file :要导入的文件
示例:
./mongoimport -d test_001 -c operation_log --file /usr/back/log.json
这里标记一个问题,就是当前用户没有权限的时候,使用mongoexport导出会出现异常:
Failed: not authorized on databasename to execute command { count: “operation_log”, query: {} }
后来查找了一下,发现可以使用mongodump导出整个库,导出的数据格式是BSON,可读性稍微差一些,可以解决上述问题,而且可以实现远程导出
语法:mongodump -h host -u user -p pwd -d db -o file –authenticationDatabase admin
参数说明:
-h :操作的设备host
-u:超级用户名
-p:超级用户密码
-d:数据库名
-c:collection名
-o:输出的文件名
示例:
./mongodump -h 127.0.0.1 -u user -p pwd -d test_001 -o /usr/back/log.json --authenticationDatabase admin
超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问)。
db是指定数据库的名字,admin是管理数据库
mongodump对应的恢复工具是mongorestore
语法:mongorestore -h host -u user -p pwd -d db -o file
参数说明:
-h :操作的设备host
-u:超级用户名
-p:超级用户密码
-d:数据库名
-c:collection名
-o:要恢复的文件名
示例:
./mongorestore -h 127.0.0.1 --port 27017 -u user -p pwd -d test /data/backup/test/ --authenticationDatabase admin
上面所说的语法是大家平时用的比较多的,还有另外一些语法,具体可以查看mongodb的官网