Mongo shell: pdepend summary xml report 解析

2016-03-26  籽藤 

前文介绍过 pdepend 生成的两个 svg 文件,本文主要介绍我的 mongo shell 脚本,以解析 xml 格式的 summary report。解析之后生成的 csv 文件如下图,第一列是 class name,第二列是 method name,之后是 ccn,ccn2 的值。此图罗列了 pdepend 发现的复杂度最高的10个类/方法。

PS. 解析 xml 的方式很多,之所以用 mongo shell,只因为最近在玩 mongo罢了。


思路如下:

下述 Python 脚本把 pdepend 生成的 xml 文件转换成 json

import xmltodict
import json

config_content = open('summary_result.xml')
config_dict = xmltodict.parse(config_content)
config_json = json.dumps(config_dict)
print config_json

将 json 文件导入 mongo db

mongoimport --file summary_result.json

编写 mongo shell

完整的源码见:https://github.com/applewu/mongo_lab/blob/master/pdepend_analyser/analyse_pdepend_summary_result.js

执行 mongo shell,生成 csv 文件 

mongo analyse_pdepend_summary_result.js > 0325.csv

好了,貌似到这里才扯到重点—— mongo shell;啃官方文档自然是王道:https://docs.mongodb.org/manual/reference/method/ 然而写个解析 json 的脚本,了解以下 mongo 语法就够了:

  •  通过字段值,查询内嵌文档( json对象 ): 如metrics.@ccn 值为 9439

db.summary_result.find({"metrics.@ccn":"9439"})

  •  不显示metrics字段:find第二个参数是可选的,指定返回哪些键

db.summary_result.find({},{"metrics":0})

  • 解析package数组中的文档元素

var doc =db.summary_result.findOne();

doc.metrics.package.forEach(function(my_package){print(my_package['@name'])})

可能因为 Mongo shell methods 用的是 javascript 语法,所以有人说 Mongo db 中的存储过程是用 javascript 实现的,我觉得这种说法不太准确,人家毕竟不是关系型数据库,根本没有 store procedure 这种叫法。当然,存储过程中的游标,逻辑判断啥的,在 mongo shell 中都可以通过 js 实现。

379°/3798 人阅读/0 条评论 发表评论

登录 后发表评论