**【摘要】**

将 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中带条件的文档--$gte、 $gt、$lte、$lt、 $eq、 $ne、distinct、与、或($or),$in、$exists

    带条件的文档的格式为:db.数据集.find({ " " : " " }) $gte:大于等于 $gt:大于 $lte:小于等于 $lt:小于 $eq:等于 $ ...

  2. 中报表导出带表头_来看看Java是 如何优雅的导出 Excel的

    点击上方"Python高校",关注 文末干货立马到手 来源:你在我家门口 juejin.im/post/5c6b6b126fb9a04a0c2f024f 前言 公司项目最近有一个需 ...

  3. easypoi导出数值型_解决EasyPoi导出Excel金额数值类型

    前言 实际业务中,业务部门总有各种苛刻的要求,于是就开始了斗智斗勇节奏... X:这数字怎么不是数值类型的? 我:数值和文本有什么区别吗? X:当然有区别,我们要快速看总和.平均值等等 我:好...S ...

  4. mongodb 服务器时区设置_关于MongoDB时区问题

    由于MongoDb存储时间按照UTC时间存储的,其官方驱动MongoDB.driver存储时间的时候将本地时间转换为了utc时间,但它有个蛋疼的bug,读取的时候非常蛋疼的是返回的是utc使时间.一个 ...

  5. mongodb更新某个字段_直播 | MongoDB开源数据库的云上之路

    本文转自阿里巴巴数据库技术 来了来了!就在今天(11月26号)阿里云-MongoDB战略合作发布会真的来了!一直被模仿从未没超越的开源界大牛MongoDB与亚太区云数据库TOP 1 阿里云数据库要联手 ...

  6. 修改mongodb最大查询数_关于MongoDB最大连接数的查看与修改

    在Linux平台下,无论是64位或者32位的MongoDB默认最大连接数都是819,WIN平台不知道,估计也没有人在 WIN平台下使用MongoDB做生产 在Linux平台下,无论是64位或者32位的 ...

  7. mongodb启动不能锁定_使用MongoDB进行乐观锁定重试

    mongodb启动不能锁定 在我以前的文章中,我谈到了对MongoDB批处理程序采用乐观锁定的好处. 如我之前所写,乐观锁定异常是可恢复的异常,只要我们获取最新的Entity,我们就会对其进行更新并保 ...

  8. mongodb mysql json数据_使用MongoDB与MySQL有很多JSON字段?

    所以,直接回答问题- Shall we chose mongodb if half of data is schemaless, and is being stored as JSON if usin ...

  9. 从html导出带样式的excel,Jquery导出带样式的Excel

    工作中做导出的时候,需要导出自定义的表格或嫌弃导出的Excel格式太难看了. 需要设置颜色.字号大小.加粗.合并单元格等等. 特性: 支持过滤 某个位置 支持过滤 img 标签 支持过滤 a 标签 支 ...

最新文章

  1. JVM GC 日志详解
  2. rabbitmq的整体架构一览
  3. MATLAB获取一个目录中的所有文件
  4. Apache服务器二级域名的完美实现
  5. Hadoop命令查看可以访问的queue
  6. 使用 JavaScript 实现灵活的固定导航功能
  7. PHP(一)——概述及服务器配置
  8. c语言判断闰年_C语言1博客作业06 - D丶千思
  9. Linux 网络编程详解四(流协议与粘包)
  10. 命令行导出和导入数据库 How to export and import MySQL database using command line Interface...
  11. hive外部表/内部表路径知识点
  12. java阻塞执行命令_java执行bat命令碰到的阻塞问题的解决方法
  13. 如何恢复计算机永久删除文件,怎么恢复被彻底删除的文件?简单有效方法分享...
  14. 计算机怎么识别ascll汉字,汉字的ASCII码表示和编码是怎样的?
  15. 苹果录屏没声音_苹果耳机突然没声音
  16. XCOM 导入条目显示正在使用中解决方案
  17. 2008,AMD发展史上的一个分水岭
  18. XP SP2激活总集
  19. js之 实现浏览器下载图片保存到本地
  20. 皮尔森相关性系数的计算python代码(四)(热力图版)

热门文章

  1. [转发]SPRING MVC3.2案例讲解--SPRING MVC3的@ResponseBody和ResponseEntity
  2. Java-二叉树算法
  3. php多进程实现 亲测
  4. SSO CAS 探究
  5. 使用 Maven 执行 java main class(java应用程序)
  6. 数据产品经理:埋点的设计、管理与应用
  7. 今日头条野心背后逃不过的10个问题
  8. 【pmcaff】产品经理每日十问,问问自己,你做到了嘛
  9. 机器学习的前期入门汇总
  10. React手稿 - Context