MongoDB 如何导出 csv文件
将非结构化的 MongoDB 数据转换成结构化的数据,导出成 csv 文件,可供迁移到其它数据库等应用。
如有集合 scores 成绩数据表,含有 subject 嵌套子文档记录各科成绩表,需导出生成 csv 文件。
name | age | province | subject |
zhou gao gao | 24 | guang xi | {"name": "Chinese","score": 80}, {"name": "Math","score": 84}, {"name": "English","score": 84}, {"name": "Chemic","score": 98} |
li chao | 16 | shan dong | {"name": "Chinese","score": 94}, {"name": "Math","score": 88}, {"name": "English","score": 75}, {"name": "Chemic","score": 73} |
yang hao hao | 26 | guang xi | {"name": "Chinese,"score": 85}, {"name": "Math,"score": 83}, {"name": "English ,"score": 64}, {"name": "Chemic,"score": 71} |
… | … | … |
使用集算器, 将数据结构化后导出成 csv 文件。
实现步骤:
1、编写脚本 scores.dfx:
A | B | |
1 | =mongo_open("mongodb://localhost:27017/student") | / 连接 MongDB 数据库 |
2 | =mongo_shell(A1,"score2.find(,{_id:0})").fetch() | / 获取集合 score 数据 |
3 | =A2.new(name, age, province, (r=subject.(score))(1): Chinese,r(2): English,r(3): Math, r(4): Chemic) | / 数据结构化,每科成绩变成一列 |
4 | >file("D:\\tmp\\exp_data.csv").export@tc(A3) | / 导出生成 cvs 文件 |
5 | =A2.news(subject; name:subject, score, A2.name, age, province) | / 数据结构化, 科目成绩对应 |
6 | >file("D:\\tmp\\exp_data2.csv").export@tc(A5) | / 导出生成 cvs 文件 |
7 | >A1.close() | / 关闭连接 |
A3 | name | age | province | Chinese | English | Math | Chemic |
zhou gao gao | 24 | guang xi | 80 | 84 | 24 | 8 | |
li chao | 16 | shan dong | 94 | 24 | 50 | 32 | |
yang hao hao | 26 | guang xi | 44 | 11 | 26 | 80 | |
… | … | … |
A6 | subject | score | name | age | province |
Chinese | 80 | zhou gao gao | 24 | guang xi | |
Math | 84 | zhou gao gao | 24 | guang xi | |
English | 24 | zhou gao gao | 24 | guang xi | |
… | … | … |
3、执行脚本后在:D:\tmp 目录下生成两个相应的 csv 文件
A5 由于科目 subject 下的名称与用户名称同名,将科目的名称改为 subject。
英文版