python查找mongo中符合条件的json记录

一、需求:

之前有次需要临时查找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 os


condition = 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 True
    return False
    pass


for a in gf:
    bs = a.read()
    string = str(bs, 'utf-8')
    print('>>>文件名:', a.filename)
    try:
        param_json = json.loads(string)
    except:
        print('json转换报错了')
        continue
    if 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的参数,可以按照下面的调整
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/277195.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LVM逻辑卷与扩容

目录 一.LVM: 1.什么是LVM: 2.LVM的基本核心组件: 3.LVM的基本命令: 二.逻辑卷的创建: 第一步,我们先要为虚拟机添加硬盘 然后我们要添加依赖包 然后我们要进行磁盘分区 再添加好分区后&#xff0…

回顾2023,展望2024

时光飞逝,光阴似箭,转眼间又到了一年的年末,现在是2023年12月29日,再过两天就要元旦了,我们也要跨入2024年了。 记录自己的总结,一直想写,不知从何写起,在这一年中,有深夜…

程序员实现财富自由的十种方法!

程序员肯定都有过一夜暴富的梦想,也许是兼职接单,也许是成为炙手可热的大网红,也许只是平凡的中张百万大奖彩票…… 除去运气超好实力拔群以外,大多数程序员是很难在短时间内实现财富自由的。虽是如此,但搞钱对于程序…

Unity Shader-真实下雨路面

Unity Shader-真实下雨路面 简介素材1.准备插件Amplify Shader Editor(这里我使用的是1.6.4最新版)2.贴纸和切图d 一、创建一个Shader Surface,实现气泡播放效果二、叠加一次气泡播放效果,使其看起来更多,更无序三、小…

Matplotlib_plt.subplots 遇见中文乱码解决方案

文章目录 一、现象:二、解决方案1.将 **SimHei.ttf** ,下载到当前运行目录中2.绘图中涉及标题、横纵坐标等,加上 **FontProperties font** 即可 环境说明:macOS系统 一、现象: 原先代码是这样的 import numpy as n…

BUUCTF Reverse/[2019红帽杯]Snake

BUUCTF Reverse/[2019红帽杯]Snake 下载解压缩后得到可执行文件,而且有一个unity的应用程序,应该是用unity编写的游戏 打开是一个贪吃蛇游戏 用.NET Reflector打开Assembly-CSharp.dll。(unity在打包后,会将所有的代码打进一个Ass…

二、类与对象(三)

17 初始化列表 17.1 初始化列表的引入 之前我们给成员进行初始化时,采用的是下面的这种方式: class Date { public:Date(int year, int month, int day)//构造函数{_year year;_month month;_day day;} private:int _year;int _month;int _day; };…

社招面试题:说一说SPI是什么,有哪些使用场景?

大家好,我是小米!今天在这里和大家分享一个在技术面试中常被问到的话题——SPI(Service Provider Interface),这是一个令人着迷的技术领域,也是很多Java开发者必须要熟悉的概念。不废话,让我们一…

TikTok短视频互动:设计引人入胜的玩法体验

在数字社交的浪潮中,TikTok以其独特的短视频形式和丰富多彩的互动玩法,成为了全球年轻一代热衷的社交平台。本文将深入剖析TikTok短视频互动的精髓,探讨其设计背后的原理,以及为何这种互动体验如此吸引人。 创意挑战的魅力 TikTok…

机器视觉在智能交通与无人驾驶领域的应用及前景

​引言 机器视觉算法对于智能交通系统和无人驾驶技术是十分重要的。机器视觉技术是无人驾驶汽车感知环境、做出决策的关键,它使得车辆能够理解周围的世界并安全地导航。在智能交通系统中,机器视觉也发挥着至关重要的作用,从提高交通效率到增…

Unity Shader 实现X光效果

Unity Shader 实现X光效果 Unity Shader 实现实物遮挡外轮廓发光效果第五人格黎明杀机火炬之光 实现方案操作实现立体感优化总结源码 Unity Shader 实现实物遮挡外轮廓发光效果 之前看过《火炬之光》、《黎明杀机》、《第五人格》等不少的游戏里面人物被建筑物遮挡呈现出不同的…

【Java干货教程】JSON,JSONObject,JSONArray类详解

一、定义 JSON:就是一种轻量级的数据交换格式,被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构,易于阅读和编写;同时也易于机器解析和生成,有效的提升网络传输效率;支持多种语言,很多…

「年终总结」生成人工智能的奇妙年份

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

MySQL之复合查询

单表查询回顾 在讲解多表查询前&#xff0c;我们先回顾一下单表查询&#xff0c;这是因为多表查询本质上依然是单表查询&#xff08;其原因在下文中讲解多表查询时再说明&#xff09;&#xff0c;只要掌握了单表查询&#xff0c;那么想掌握多表查询是非常简单的。 在<<…

【Electron】富文本编辑器之文本粘贴

由于这个问题导致&#xff0c;从其他地方复制来的内容 粘贴发送之后都会多一个 换行 在发送的时候如果直接&#xff0c;发送innerHTML 就 可以解决 Electron h5 Andriod 都没问题&#xff0c;但是 公司的 IOS 端 不支持&#xff0c;且不提供支持&#xff08;做不了。&#xff…

2023年华为OD机试(python)B卷-符合要求的结对方式

一、题目 题目描述&#xff1a; 用一个数组A代表程序员的工作能力&#xff0c;公司想通过结对编程的方式提高员工的能力&#xff0c;假设结对后的能力为两个员工的能力之和&#xff0c;求一共有多少种结对方式使结对后能力为N。 二、输入输出 输入描述: 5 1 2 2 2 3 4 第一行为…

个人用户免费,亚马逊正式推出 AI 编程服务 CodeWhisperer

亚马逊于 2022 年 6 月以预览版的形式&#xff0c;推出了 AI 辅助编程服务 CodeWhisperer。2023年4月18日&#xff0c;亚马逊云科技宣布&#xff0c;实时 AI 编程助手 Amazon CodeWhisperer 正式可用&#xff0c;同时推出的还有供所有开发人员免费使用的个人版&#xff08;Code…

深入理解Mysql MHA高可用集群搭建:从实验到实战

1. 简介 MHA&#xff08;Master High Availability&#xff09;是一个高效的开源MySQL高可用性解决方案。由日本开发者yoshinorim&#xff08;前DeNA员工&#xff0c;现在Facebook&#xff09;创建&#xff0c;MHA支持MySQL的主从复制架构&#xff0c;自动化主节点故障转移。当…

Lunix的奇妙冒险————权限篇

文章目录 一.什么是权限二.用户权限和类别。1.用户2.角色3.更换文件角色 三.文件的类别和对应权限1.文件的类别。2.文件属性权限1.权限说明。2.默认生成文件权限来源3.更改权限 3.文件的执行与删除 四.不同用户共同在一个目录下的权限。1.普通用户家目录2.在同一目录下文件的权…

springcloud中使用openfeign来优化接口调用

简单介绍在springcloud中使用openfeign来优化接口调用 目录 一、引入依赖二、为服务提供者编写openfeign接口三、服务消费者调用定义的openfeign接口四、项目结构五、日志级别配置1、通过配置类进行全局配置2、通过配置类进行局部配置3、通过配置文件配置 一、引入依赖 <!-…