mongodb 和MinIO 常用代码

mongodb_读取id并在Minio中查找该文件是否存在

python 复制代码
import pymongo
from minio import Minio
from minio.error import S3Error

''' 
settings = {
    "ip": "mongodb://rootxxxx",  # ip
    "db_name": "tl-xxxx",  # 数据库名字
}
self.conn = MongoClient(settings['ip'])[settings['db_name']][set_name]
'''



# 创建 MongoDB 连接
client = pymongo.MongoClient("mongodb://root:roxxxxx")



#红绿灯老数据库
# 创建Minio客户端对象
minio_client = Minio(
    "xxxx.xxxx.cn:9000",
    access_key="perxxxr",
    secret_key="xxxx",
    region="xxxx",
    secure=False
)


mongo_config = {
    "ip":"mongodb://roxxxxx",   #ip
    "collections": ""
}

bucket_name="ai-lhb-tl-xxxxx"

mooogdb_name="tl-xxxx"

# 选择要连接的数据库
db = client[mooogdb_name]
collection_names = db.list_collection_names()
print("collection_names:",collection_names)
# 获取要修改的 Collection 对象
collection = db.get_collection("batch10")

total_imgs = []
i=0
j=0
for data in collection.find():
    total_imgs.append(data['_id'])
    image_name=data['_id']
    image_name="a.jpg"
    i=i+1
    #print("i={},data['_id']={}".format(i,data['_id']))
    # 检查文件是否存在
    try:
        # 检查文件是否存在
        found = minio_client.stat_object(bucket_name, image_name)
        if found:
            j=j+1
            pass
            #print("File exists")
        else:
            print("File does not exist")
    except S3Error as err:
        print(err)

print("total_imgs:",len(total_imgs))
print("i:",i)
print("j:",j)

# 使用 renameCollection 方法修改 Collection 名称,
# dropTarget=True 表示如果新的 Collection 名称已经存在,则删除该 Collection。
#collection.rename("batch10", dropTarget=True)

# 验证 Collection 名称是否成功修改
print(db.list_collection_names())

mongodb_修改Collection名称

python 复制代码
import pymongo
''' 
settings = {
    "ip": "mongodb://root:root@x.x.x.100:xxxx",  # ip
    "db_name": "tl-stage1",  # 数据库名字
}
self.conn = MongoClient(settings['ip'])[settings['db_name']][set_name]
'''
# 创建 MongoDB 连接
client = pymongo.MongoClient("mongodb://xxxxxx")

# 选择要连接的数据库
db = client["xxxxx"]
collection_names = db.list_collection_names()
print("collection_names:",collection_names)
# 获取要修改的 Collection 对象
collection = db.get_collection("batch10_dirty")



# 使用 renameCollection 方法修改 Collection 名称,
# dropTarget=True 表示如果新的 Collection 名称已经存在,则删除该 Collection。
#collection.rename("batch10", dropTarget=True)

# 验证 Collection 名称是否成功修改
print(db.list_collection_names())

mongodb 复制一份已经存在的Collection并重新命名

python 复制代码
'''**************************************************************************
文件说明:mongodb 复制一份已经存在的Collection并重新命名

版本:1.0
内容:mongodb 复制一份已经存在的Collection并重新命名
时间:2024.3.23
作者:狄云

***************************************************************************'''
import os
import sys
from os.path import expanduser

from pymongo import MongoClient
import datetime
from tqdm import tqdm
import argparse
import cv2
import numpy as np
import json
import sys
import os
import multiprocessing
import torch
from pathlib import Path
from minio import Minio


'''**************************************************************************
配置参数
***************************************************************************'''
# 老数据库(红绿灯)
mongo_config = {
    "ip":"mongodb://xxx@xxxxxx:xx",   #ip
    "collections": ""
}

#新数据库
# mongo_config = {
#     "ip":"mongodb://xxxx@xxxxx:27017",   #ip
#     "collections": ""
# }
LABEL_PAHT="/xxx/xxx/xxxxx/label_temp/ad8c1504-xx-11ed-8bb1-xxx/2024/01/30/1706622185/label"




'''**************************************************************************
函数名称: parse_args
描    述: 解析配置文件
输    入: 
输    出:
返 回 值: 
作    者:狄云
编写时间:2024.3.23
***************************************************************************'''
def parse_args(in_args=None):
    parser = argparse.ArgumentParser(
        description="upload stage1 imgs to mongodb and minio")
    parser.add_argument(
        "--collection",

        default="xxxx",
        help="collection name in mongodb",
    )
    parser.add_argument(
        "--database",
        default='tl-xxxx',
        help="database name in mongodb",
    )
    return parser.parse_args(in_args)

if __name__ == '__main__':
    args = parse_args()
    t = datetime.datetime.now()
    conn = MongoClient(mongo_config['ip'])[args.database]
    print("conn=",conn)
    collection_names = conn.list_collection_names()
    print("collection_names=",collection_names)
    if args.collection not in collection_names:
        print("collection not in mongodb")
        print("请检察mongodb \n1、登陆账号是新数据库还是老数据库\n2、请检查database是否正确")
        exit(0)
    else:
        print("OK!!!! clips in mongodb")
    mongo_collection = conn[args.collection]
    old_collection_name = args.collection # 要复制的已存在集合名称
    new_collection_name = "batch10_temp"  # 新集合的名称

    pipeline = [
        {"$match": {}},  # 匹配所有文档
        {"$out": new_collection_name}  # 输出到新的集合
    ]

    result = conn[old_collection_name].aggregate(pipeline)

    print(f"已复制集合 {old_collection_name} 到 {new_collection_name}")

上传红绿灯标注json文件

将标注完成后的红绿灯json文件上传到minio,并在mogodb中更信json文件名称

python 复制代码
'''**************************************************************************
文件说明:将标注完成后的红绿灯json文件上传到minio,并在mogodb中更信json文件名称

版本:1.0
内容:将标注完成后的红绿灯json文件上传到minio,并在mogodb中更信json文件名称
时间:2024.3.23
作者:狄云

***************************************************************************'''
import os
import sys
from os.path import expanduser

from pymongo import MongoClient
import datetime
from tqdm import tqdm
import argparse
import cv2
import numpy as np
import json
import sys
import os
import multiprocessing
import torch
from pathlib import Path
from minio import Minio


'''**************************************************************************
配置参数
***************************************************************************'''
LABEL_PAHT="/disk1/xx/xx/xxx/xxx-d038-11ed-8bb1-ebe380642749/2024/01/30/1706622185/label"

# 老数据库(红绿灯)
mongo_config = {
    "ip":"mongodb://xxx@xxxx:xxx",   #ip
    "collections": ""
}

#新数据库
# mongo_config = {
#     "ip":"mongodb://xxx@xx:xx",   #ip
#     "collections": ""
# }

minio_client = Minio(
    "ossapi.xxx.cn:9000",
    access_key="xx-xx",
    secret_key="xx",
    region="shjd-xx",
    secure=False
)
bucket_name = "ai-xxx-tl-xx"

def parse_args(in_args=None):
    parser = argparse.ArgumentParser(
        description="upload stage1 imgs to mongodb and minio")
    parser.add_argument(
        "--collection",

        default="xx",
        help="collection name in mongodb",
    )
    parser.add_argument(
        "--database",
        default='tl-xxx',
        help="database name in mongodb",
    )
    return parser.parse_args(in_args)




'''**************************************************************************
函数名称: parse_args
描    述: 使用 MongoDB 和 MinIO 来查找文件
输    入: 
输    出:
返 回 值: 
作    者:狄云
编写时间:2024.3.23
***************************************************************************'''
def processing():
    global mongo_collection

    # 1、遍历MongoDB batch10所有元素
    total_imgs = []
    for data in mongo_collection.find():
        image_id = data['_id']
        total_imgs.append(image_id)
        #2、 查找对应文件夹中是否存在该图像对应的json文件,有就更新MongoDB中label_json 元素,没有就不写
        json_name=os.path.splitext(image_id)[0]
        json_name=json_name+'.json'
 

        json_file_path = LABEL_PAHT + "/" + json_name # 合并文件夹路径和文件名

        if os.path.exists(json_file_path):
            #print(f"The file {json_name} exists in the folder.")
            pass
        else:
            print(f"The file {json_name} does not exist in the folder.")
            continue
        
        # 更新MongoDB中label_json 元素,update_one更新一条数据
        mongo_collection.update_one({"_id":image_id},{"$set":{"label_json":json_name}})
        #print("update OK")


        #3、 将 json 文件上传到minio 
        # 上传JSON文件
        try:
            minio_client.fput_object(bucket_name, json_name, json_file_path)
            print(f"文件 {json_name} 上传成功至存储桶 {bucket_name}")
        except Exception as e:
            print(f"发生错误:{e}")
    print("total_imgs=",total_imgs[0])
    print("total_imgs.size=",len(total_imgs))








    # try:
    #     # 使用 MongoDB 的 find() 方法来查找具有指定 _id 的文件。
    #     data = conn.find({"_id": clip_name})
    #     for cur_data in data:
    #         # 此时 cur_data 获取的是_id 对应的所有数据
    #         print("cur_data=",cur_data)

    # except:
    #     print("代码出了问题")
    #     pass


if __name__ == '__main__':
    args = parse_args()
    t = datetime.datetime.now()
    conn = MongoClient(mongo_config['ip'])[args.database]
    print("conn=",conn)
    collection_names = conn.list_collection_names()
    print("collection_names=",collection_names)
    if args.collection not in collection_names:
        print("collection not in mongodb")
        print("请检察mongodb \n1、登陆账号是新数据库还是老数据库\n2、请检查database是否正确")
        exit(0)
    else:
        print("OK!!!! clips in mongodb")
    mongo_collection = conn[args.collection]

    processing()
相关推荐
凌虚5 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
五阿哥永琪5 小时前
MySQL中操作json的函数!
数据库·mysql·json
来者皆善5 小时前
了解Mysql优化吗?如何优化索引?
数据库·mysql
赤壁小虾7 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
MC皮蛋侠客7 小时前
SQLAlchemy 系列(七):高级建模与高效写入——批量 DML、方言与扩展
数据库·python
奈斯先生Vector8 小时前
把 Midjourney 二次编辑做成生产系统:customId 能力令牌、Action Graph 与 WebUI 精修工作台
数据库·人工智能·架构·aigc·音视频·midjourney
Lethehong9 小时前
双擎并驱·全链路并行:KFS让TB级异构增量同步秒级到达
数据库
MC皮蛋侠客9 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
一水9 小时前
Redis实战:一个AI工作流系统里的五个应用场景,从传参到限流的完整链路
数据库·redis·wpf
枫叶v.10 小时前
Prompt Injection 防不住怎么办?从 Source-Sink 模型设计 Agent 安全边界
数据库·安全·prompt