释放双眼,带上耳机,听听看~!
1.导出
mongoexport 用于将 MongoDB 数据库中的数据导出为 JSON 或者 CSV 格式
我们以上一节基本操作中的 users 集合为例,首先,我们向其中插入几条数据:
> db.users.insertMany([{name: “Aiden”, age: 30, email: “luojin@simplecloud.cn”, addr: [“CD”, “SH”]}, {name: “Tom”, age: 20, email: “tom@simplecloud.cn”, addr: [“BJ”, “SH”]}, {name: “Jim”, age: 20, email: “jim@simplecloud.cn”, addr: [“BJ”, “SH”]}, {name: “Cat”, age: 10, addr: [“SZ”, “CD”]}])
我们来查看集合中的文档:
> db.users.find()
输出结果如下:
可以看到已经将数据插入进去了。
下面我们来使用 mongoexport 命令导出 users 集合中的数据,保存为 users.json :
$ mongoexport –db shiyanlou001 –collection users –out users.json
–db 选项是指定数据库的名称,我们这里为 wanneng001
–collection 是指定集合的名称,我们这里为 users
–out 是指定导出的文件的文件名,我们这里为 users.json
下面我们介绍 mongoexport 中的一些常用的命令行参数:
–db 指定数据库名。 –collection 指定集合名。
–type 指定文件类型为 csv 或者 json。默认为 json 。
–out 指定导出的文件名。如果没有指定,将输出到 stdout 。
–pretty 对于 json 类型而言,将输出一个更直观清晰的格式。
–limit 指定导出的文档数目。
–sort 指定导出结果的排序。比如:
–sort ‘{“age”:1}’ 表示对 age 字段的值升序排列,如果想降序排列,可以把冒号后面改为 -1 。
–query 提供一个 json 文档作为匹配条件,限制返回的结果集。
2.导入
与 mongoexport 对应的即为 mongoimport。用于导入由 mongoexport 创建的 json 和 csv 的内容。
因此,对于 mongoimport 来说,常见的参数与 mongoexport 类似。我们这里是从文件导入到 MongDB 的数据库中,而 mongoimport 的 –db 和 –collection 指的是导入的地方,所以会用到两个 mongoexport 中不存在的参数:
–file 指定将要导入的文件的文件名。未指定时,从标准输入导入。
–drop 在导入时,指定的集合存在时,使用该选项,将删除原来的内容
例如,我们导入之前导入的 users.json 文件:
3.备份
mongodump 能够把导出的数据库中的内容保存为一个二进制文件。不同于导入导出,这里针对的是数据库。你也可以通过配置项选择集合进行备份。
mongodump 仅备份数据库中的文档,不包含索引( MongoDB 中默认索引为 _id )数据,并且本地数据库 local 不会被备份。 我们可以直接使用 mongodump 进行备份操作:
mngodump
查看 dump 的目录结构:
如上所示,并未备份 local 数据库(即本地数据库)中的内容,默认的 IP 是 localhost 和 PORT是 27017,默认输出为当前目录下的 dump 目录 。
下面简单列举一些常见的参数:
--host <:port>, -h <:port>默认值: localhost:27017
--port 默认值: 27017
--username , -u 指定用户名,需要与 --password and --authenticationDatabase 配置项一起使用
--db , -d 指定数据库进行备份。未指定时会备份除本地数据库的所有数据库。
--collection , -c 指定集合进行备份,未指定针对指定数据库中的所有集合
--out , -o 指定保存目录。默认值为 dump
--archive 将备份内容写入到一个存档文件中,该选项可以用来代替 --out 选项,但不能在 --out 选项中使用 --archive 选项
4.恢复
mongorestore 可以从 mongodump 创建的备份中读取内容。对于服务器中存在的内容,mongorestore 不会覆盖原有的内容,如果数据库中集合的文档与要恢复的的文档有相同的值,原有文档不会被覆盖。
该参数是mongorestore 的最后一个参数,指定要从恢复的备份内容的位置
--archive 从归档文件中恢复
--dir 与 功能相同,两者不能同时使用
如下示例,恢复备份中的内容:
$ mongorestore –dir dump
输出结果如下:
2017-11-27T13:09:50.431+0800 preparing collections to restore from
2017-11-27T13:09:50.639+0800 reading metadata for wanneng001.users from dump/wanneng001/users.metadata.json
2017-11-27T13:09:50.746+0800 restoring wanneng001.users from dump/shiyanlou001/users.bson
2017-11-27T13:09:50.916+0800 error: multiple errors in bulk operation:
E11000 duplicate key error collection: wanneng001.users index: id dup key: { : ObjectId(‘5a17e091bb4310a50c2010f4’) }
E11000 duplicate key error collection: wanneng001.users index: id dup key: { : ObjectId(‘5a17e091bb4310a50c2010f5’) }
E11000 duplicate key error collection: wanneng001.users index: id dup key: { : ObjectId(‘5a17e091bb4310a50c2010f6’) }
E11000 duplicate key error collection: wanneng001.users index: id dup key: { : ObjectId(‘5a17e091bb4310a50c2010f3’) }
2017-11-27T13:09:50.917+0800 no indexes to restore
2017-11-27T13:09:50.917+0800 finished restoring wanneng001.users (4 documents)
2017-11-27T13:09:50.917+0800 done