MongoDB 01 mongoexport 数据导出工具

1,541 阅读3分钟

前言

最近用到了 MongoDB 的 export 来导出数据,故来此处总结下,以便日后查看。

准备数据

use studentManagement;
db.student.insert({
    id: NumberInt(1),
    name: "小明",
    sex: "男",
    scores: [
    {
        course: '数学',
        score: NumberInt(80),
        exam_date: ISODate("20210205")
    },
    {
        course: '语文',
        score: NumberInt(100),
        exam_date: ISODate("20210205")
    }]
});
db.student.insert({
    id: NumberInt(2),
    name: "小红",
    sex: "女",
    scores: [
    {
        course: '数学',
        score: NumberInt(90),
        exam_date: ISODate("20210205")
    },
    {
        course: '语文',
        score: NumberInt(100),
        exam_date: ISODate("20210205")
    }]
});

MongoExport

参数

  • -h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
  • --port:代表远程连接的数据库的端口,默认连接的远程端口27017;
  • -u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
  • -p,--password:代表连接数据库的账号对应的密码;
  • -d,--db:代表连接的数据库;
  • -c,--collection:代表连接数据库中的集合;
  • -f, --fields:代表集合中的字段,可以根据设置选择导出的字段;
  • --type:代表导出输出的文件类型,包括csv和json文件;
  • -o, --out:代表导出的文件名;
  • -q, --query:代表查询条件;
  • --skip:跳过指定数量的数据;
  • --limit:读取指定数量的数据记录;
  • --sort:对数据进行排序,可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列,如sort({KEY:1})。

从参数 type 可以看出主要用两种导出文件格式: JSON 和 CSV

JSON 文件格式

mongoexport -d studentManagement -c student -o student.json  --authenticationDatabase admin -u 用户名 -p 密码

执行后,数据展示

可以看到 student.json 中有两条标准的JSON格式的数据。

CSV 文件格式

mongoexport -d studentManagement -c student -o student.csv  --authenticationDatabase admin -u 用户名 -p 密码 --type=csv -f id,name,sex,scores

注:除了添加 --type=csv 外,必须添加 -f 所需属性列表 ,否则会如下报错

执行后,数据展示

可以看到第一行为属性名列表,然后是两行数据。
因这里的数据 scores 是数组类型的,导出后是个字符串。这样的字符串数据是不符合所需的CSV格式的,也不利于后续的数据分析的,是我们不希望看到的数据。
故此处只是单纯地使用 export 是不合适的,所以我们需要在导出之前对数据进行处理,具体操作步骤如下:

导出为 CSV 前,先将数组数据进行拆分,保存至 student_export
db.student.aggregate([
    // 拆分 scores
    {$unwind: "$scores"},
    // 所需属性
    {$project: {id:"$id", name:"$name", sex:"$sex", course:"$scores.course", score: "$scores.score", exam_date:"$scores.exam_date", _id: 0}},
    // 保存至 student_export
    {$out: "student_export"},
]);

执行后,查看数据:

此时,两条数据拆分为了四条数据。

将 student_export 导出为 CSV 文件
mongoexport -d studentManagement -c student_export -o student.csv  --authenticationDatabase admin -u 用户名 -p 密码 --type=csv -f id,name,sex,course,score,exam_date

执行后,数据展示

此时,就符合我们平时分析数据所用的CSV文件格式的要求了。

最后,记得删除 student_export

db.student_export.drop()