from pprint import pprint
import pymongo
from bson.objectid import ObjectId
class DB(object):
__mangoDbClient = None
__instance = None
__conn = None
uri = "xxx"
@property
def __connection(self):
self.__mangoDbClient = pymongo.MongoClient(self.uri)
return self
def __connect(self, sets):
"""
sets: 选择需要链接的集合
"""
self.__conn = self.__mangoDbClient[sets]
return self
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = object.__new__(cls)
return cls.__instance
def __call__(self, sets: str = None, filters: {} = None):
return self.__connect(sets).find_one(filters)
def __init__(self, database="zpqa_consistency"):
self.__mangoDbClient = self.__connection.__mangoDbClient[database]
@classmethod
def transform_object(cls, filters: {}):
if filters.get("_id"):
filters["_id"] = ObjectId(filters["_id"])
return filters
def find_many(self, filters: {} = None, rules: {} = None):
"""
filters: 过滤条件
rules: 指定返回字段规则
"""
return self.__conn.find(DB.transform_object(filters), rules)
def find_one(self, filters: {} = None):
"""
filters: 过滤条件
rules: 指定返回字段规则
"""
return self.__conn.find_one(DB.transform_object(filters))
def find_regex(self, filters: str = None, regex: str = None, rules: {} = None):
"""
filters: 过滤字段
regex: 需要匹配的正则
rules: 指定返回字段规则
"""
return self.__conn.find({filters: {"$regex": regex}}, rules)
if __name__ == '__main__':
# sets_name = "consistencyTask"
# filters_name = {"code": "CC23022419351889"}
# conn = DB()
# result = conn(sets_name, filters_name)
# pprint(result)
# set_name = "consistencyTask"
# filter_name = {"code": "CC23021209592309"}
set_name = "user"
# filter_name = {"_id": ObjectId("63e847006a244b6fde32ce85")}
filter_name = {"_id": "63e847006a244b6fde32ce85"}
conn = DB()
resp = conn(set_name, filter_name)
print(resp)
# data = {"submissionId": "63b7016add19b7447977aac6"} # 标准匹配
# data2 = {"submissionId": {"$regex": "^(63b7)"}} # 正则匹配
# rule = {'elementType': 1, 'processFeatureIds': 1, 'processStepId': 1, 'submissionId': 1}
# result = __conn.find_one({"submissionId": data2})
# print(result)
# res = conn.find_regex("submissionId", "^63b701")
# for i in res:
# pprint(i)
# res = __conn.find_many(data2, {})
# for i in res:
# print(i)
Python: 单例模式
于 2023-03-21 15:02:38 首次发布