一、需求:
之前有次需要临时查找mongo中存储的json串,符合特定条件的记录;
举个例子,mongo中记录如下图:
其中每条存储的数据大概为:
[{"createUser": "Zxtech","paramName": "OrderNo","paramValue": "PSO20231100001","type": 1,"updateUser": "Zxtech"},{"createUser": "Zxtech","paramName": "ADRTy","paramValue": "NA","updateUser": "Zxtech"},......
]
比如,我要找出所有 paramName 是 ADRTy , 并且 paramValue 为 NA 的所有记录,
正常找一般怎么做的呢?!挨个把文件下载下来,然后去找符合条件的?或者是java写个接口,调一下?都可以,但是好像都比较麻烦。。。
二、解决:
python连接mongo,然后遍历所有记录,每条记录取出json,然后把json中符合条件的记录,放到一个文件中。
代码:
import pymongo
import gridfs
import json
import oscondition = input("\n>>>请输入条件: \n")
# 解析条件 'paramName': 'ZZ156', 'paramValue': '标准_EX-M01'
# condition = 'V=1.0&&BUFtype=HYD' ZZ156=标准_EX-M01&&Languages=中文
conditions = condition.split('&&')
cond_arr = []
for c in conditions:cc = c.split('=')p_name = cc[0]p_value = cc[1]t_arr = (p_name, p_value)cond_arr.append(t_arr)
print(cond_arr)mongo_ip = input("\n>>>请输入mongo ip: \n")
if mongo_ip is None or mongo_ip == '':mongo_ip = '192.168.51.19'
print('>>>连接mongo:')
# client = pymongo.MongoClient('192.168.0.222', connect=False)
client = pymongo.MongoClient(mongo_ip, connect=False)
db = client['pso_param']
# 存储到mongodb
# 从mongodb取出文件
fs = gridfs.GridFS(db)
gf = fs.find()def validate_cond(param_name, param_value):# cond_arr = [(V, 1.0), ('BUFtype', HYD)]for cond in cond_arr:# (V, 1.0)if param_name == cond[0] and param_value == cond[1]:return Truereturn Falsepassfor a in gf:bs = a.read()string = str(bs, 'utf-8')print('>>>文件名:', a.filename)try:param_json = json.loads(string)except:print('json转换报错了')continueif param_json is None:print('continue')continue# print(param_json)# 查V=1.0 且 BUFtype=HYD的所有任务;valid_res = []# [{'paramName': 'Languages', 'paramValue': '中文', ...}, {...}, ...]for j in param_json:if j is not None and 'paramValue' in j:val_res = validate_cond(j['paramName'], j['paramValue'])if val_res:valid_res.append(val_res)if len(valid_res) == len(cond_arr):print(a.filename + "\n")io = open("d:/ccc.txt", 'a', )# 不存在文件,写入文件内容io.write(a.filename + "\n")io.close()print('执行结束')
三、打包
生成可执行的exe文件(参数-F 就是为了生成exe的)
pyinstaller -F mongo.py
四、效果
先在新建个txt文件,路径为:d:/ccc.txt
首先是提示输入查询条件,例:V=1.0&&BUFtype=HYD
然后是提示输入mongo的ip,例:192.168.0.222
…
运行完,查看d盘下的ccc.txt文件就可以了。
(注:open(“d:/ccc.txt”, ‘a’, ) 其中的‘a’第二次运行时是不会删除原内容的)
五、扩展
这个可以写的更好,更完善,本人这个只是用一次就扔了,基本不会再用,所以写的比较随意。
可以增加ui,查询框,查询结果…
还有关于open的参数,可以按照下面的调整