来源:https://plus.google.com/+VicNgrail/posts/ebS9JUtFopw。
Mongodb可以存储非结构化数据,要将这些数据导出为标准的结构化数据会存在一定的困难。用集算器结合MongoDB可以方便的导出标准化数据,下面看一下具体做法。
Collection test的部分数据如下:
/* 0 */
{
“_id” : ObjectId(“5518f6f8a82a704fe4216a43″),
“id” : “No1″,
“cars” : {
“name” : “Putin”,
“car” : ["porche", "bmw"]
}
}
/* 1 */
{
“_id” : ObjectId(“5518f745a82a704fe4216a44″),
“id” : “No2″,
“cars” : {
“name” : “jack”,
“car” : ["Toyota", "Jetta", "Audi"]
}
}
需要将其导出为CSV文件,格式如下:
集算器代码:
A1:连接MongoDB,连接字格式为mongo://ip:port/db?arg=value&…
A2:使用find函数从MongoDB中取数,形成游标。集合是test,过滤条件是空,取出_id之外的所有字段。集算器的find函数和mongdb的find函数类似,过滤条件的写法遵循mongodb规范。
A3:取出需要的字段,拼合成结构化二维表,结果仍然是游标。其中~表示A2中的每个document,函数conj表示纵向合并。
A4:将A3导出为逗号分隔的文本文件。@t表示导出时带列名。集算器引擎会自动管理缓存,每次从游标取一批记录到内存进行计算。
A4:关闭MongoDB。
如果用户想自己管理每批处理的数据,也可以用下面的代码:
A3:循环从游标读数,每次读1000条到内存。A3的作用范围是缩进的B3到B4,其间可以用A3来引用循环变量。A3中的数据如下:
B3:将本批次数据转换为结构化二维表,如下:
B4:将本批次的计算结果追加到文件中。@a表示追加。