【摘要】

将 Mongodb 数据结构转换成结构化的数据需求,我们可利用集算器 SPL 语言来进行辅助实现。若想了解更多,请前往乾学院:将 MongoDB 导出成 csv!

来源:https://plus.google.com/+VicNgrail/posts/ebS9JUtFopw Mongodb 可以存储非结构化数据,尤其擅长存储 json 格式的数据。对于习惯于数据库表结构的用户或需要使用结构化数据的用户来说,往往希望能将非结构化的数据转换成结构化的数据,以方便后面的计算,而要将这些数据导出为标准的结构化数据经常存在一定的困难。针对这种情况,我们可以利用集算器 SPL 语言来辅助 MongoDB,方便地导出结构化数据,下面用例子说明。

Collection carInfo 的部分数据如下:
{
“_id” : ObjectId(“5518f6f8a82a704fe4216a43”),
“id” : “No1”,
“cars” : {
“name” : “Putin”,
“car” : [“porche”, “bmw”]
}
}
{
“_id” : ObjectId(“5518f745a82a704fe4216a44”),
“id” : “No2”,
“cars” : {
“name” : “jack”,
“car” : [“Toyota”, “Jetta”, “Audi”]
}
}
……

需要将其导出为CSV文件,期望的数据格式如下:

使用集算器SPL的代码如下:

A 1 =mongo_open("mongodb://localhost:27017/local?user=test&password=test") 2 =mongo_shell(A1,"carInfo.find(,{_id:0})") 3 =A2.conj((t=~,~.cars.car.new(t.id:id, t.cars.name:name, ~:car))) 4 =file("D:data.csv").export@t(A3;",") 5 >mongo_close(A1)

A1: 连接MongoDB,连接字格式为mongo://ip:port/db?arg=value&…

A2: 使用find函数从集合carInfo中取数,形成游标。过滤条件是空,取出_id之外的所有字段。

A3: 取出需要的字段,拼接合成结构化二维表,结果仍然是游标。其中~表示A2中的每个document,并对cars.car字段进行拆分成行后组成序表,函数conj表示对序表纵向合并。

A4: 将A3导出为逗号分隔的csv文件,其中@t表示导出时带列名。SPL引擎会自动管理缓存,每次从游标取一批记录到内存进行计算。

A5: 关闭MongoDB。

如果用户想自己管理每批处理的数据,也可以用下面的代码:

A B 1 =mongo_open("mongodb://localhost:27017/local?user=test&password=test") 2 =mongo_shell(A1,"carInfo.find(,{_id:0})") 3 for A2,1000 =A3.cars.car.new(A3.id:id, A3.cars.name:name, ~:car) 4 =file("D:data.csv").export@ta(B3;",") 5 >mongo_close(A1)

A3: 循环从游标读数,每次读1000条到内存。A3的作用范围是缩进的B3到B4,其间可以用A3来引用循环变量。A3中的数据如下:

B3:将本批次数据转换为结构化二维表,如下:

B4:将本批次的计算结果追加到文件中,其中@a表示数据追加。

简言之,SPL得到数据集合的游标后,将每个document按car字段拆分后组成序表,将序表合并或以追加方式保存为文件即可。显然,对于这类非结构化数据向结构化数据的转换,SPL语言的处理非常高效且简明。

mongodb 导出一条数据_将 MongoDB 导出成 csv相关推荐

  1. mongodb 存储过程 遍历表数据_使用MongoDB存储数据

    在 Ubuntu14.04 上安装 Install MongoDB Community Edition 1. Import the public key used by the package man ...

  2. 导出一条数据_来自小师弟的灵魂拷问之数据泵导出丢失的那些数据量去哪了?...

    在精彩刺激又些许无聊的运维生活中,有可爱呆萌的师弟师妹,也是为工作增添了一些色彩.正在午休的时候, 尚未毕业的小师弟在悄悄问小师妹,为什么数据库中查出来的数据量有100G,expdp导出的dump文件 ...

  3. mysql两条记录合成一条数据_踩坑记录之csv数据导入MySQL

    可能采坑的操作 将excel表格转换成csv 逗号分隔,然后notepad检查文件是否是utf8编码,保存. 打开 phpMyAdmin , 选择要导入的表格,然后点击导入: 导入设置 点击执行之后, ...

  4. mongodb添加多条数据_分析了一万多条拼车数据,看看北上广深的各位都回哪过年...

    快过年了,很多同学都踏上了返乡的路.现在交通这么发达,除了高铁飞机外,还可以搭顺风车回家.今天的这篇文章我们就来分析一下拼车数据,看看今年大家都回哪儿过年. 分析了一万多条拼车数据,看看北上广深的各位 ...

  5. mongodb 存储过程 遍历表数据_一个mongodb存储过程

    functionProhibitNumbers(datetype,startdate,enddate,org,pageindex,pagesize) {//违规检查-数量控制 ProhibitNumb ...

  6. 导出excel HSSFWorkbook 只能最多导出65535条数据

    HSSFWorkbook 最多导出65535条数据 /**      * excel 2003版本的导出方法 支持多个sheet导出 导出的文件后缀为.xls      * 由于excel2003最多 ...

  7. java读取百万条记录出错_如何实现导出百万条数据到EXCEL中不报OOM异常?

    Java项目中使用POI导出百万条数据到Excel中,但是会出现内存溢出异常. 存在以下问题需要考虑POI导出条数限制6w+ 数据量大的话会导致内存溢出 现在的做法是每6w条数据做一次分割,创建一个新 ...

  8. 百万数据php7取出循环_Thinkphp5 分批批量导出百万条数据记录的Code,不用PHPEXCEL哦!...

    通过phpexcel导出上万条数据,会延迟.内存溢出.程序报错,各种问题出现...届时作者放弃了phpexcel,导出小数据量还是很可行的.下面通过分批导出csv,并压缩至zip中提供下载...废话不 ...

  9. JAVA导出exls时报oom_如何实现导出百万条数据到EXCEL中不报OOM异常?

    Java项目中使用POI导出百万条数据到Excel中,但是会出现内存溢出异常. 存在以下问题需要考虑POI导出条数限制6w+ 数据量大的话会导致内存溢出 现在的做法是每6w条数据做一次分割,创建一个新 ...

最新文章

  1. [WPF疑难]避免窗口最大化时遮盖任务栏
  2. 全方位讲解硬件防火墙的选择
  3. ubuntu18 安装 chrome
  4. php识别号码格式豹子,[转载]php新手入门之PHP常用特殊运算符号
  5. Kotlin之函数作为参数传递
  6. 【渝粤题库】广东开放大学 物业财税管理基础 形成性考核
  7. 红米note3支持html,【小米红米Note3评测】外观变化不小 金色版略显俗套_小米 红米Note3_手机评测-中关村在线...
  8. Windows域策略设置 禁止客户端上网【全域策略生效】
  9. 2019运输科技领域最新SCI期刊影响因子正式发布,附三年IF变化趋势!
  10. 用matlab如何画中国地图,利用matlab画中国地图的几种方法
  11. 刀塔传奇战斗系统分析
  12. vue设计调查问卷:换个思路解决问题
  13. 将磁盘分区标记为活动分区后取消
  14. IO_CELL里的slew rate control
  15. **2019年java最新手机号正则**
  16. 【零基础学JS -4】深入剖析script标签
  17. Pytorch 之修改Tensor部分值
  18. Scrapy IT之家评论爬虫
  19. 论文阅读笔记【3】:网络表示学习
  20. 【视频压缩】基础知识(一):一文彻底弄懂分辨率、宽高比

热门文章

  1. 求求你给你的微信头像戴个圣诞帽吧!
  2. 全球顶级开源大神们现身 COSCon‘20
  3. 安卓机+数据线,带你开发部署人脸识别应用
  4. 荣耀30S首销全平台夺冠 赵明:满足消费者对5G的所有需求和想象
  5. 以太坊 2.0、分片、DAG、链下状态通道……概述区块链可扩展性的解决方案!
  6. 业界唯一集成AI加速的服务器处理器,全新第二代至强巩固英特尔数据中心领导者地位
  7. 面向数据科学家的 Docker 最佳实践
  8. 一年多的远程办公带给我的感悟
  9. 他:32岁,公司骨干技术,月薪1万,加班猝死
  10. 保温杯都这么给力了,你的 Bug 就不能少点?