自定义Mongodb的操作接口

自定义Mongodb的操作接口

from pymongo import MongoClient


class MongoAPI(object):
    def __init__(self, db_name, table_name, host="127.0.0.1", port=27017):
        self.db_name = db_name
        self.table_name = table_name
        self.host = host
        self.port = port
        self.conn = MongoClient(host=self.host, port=self.port)
        self.db = self.conn[self.db_name]
        self.table = self.db[self.table_name]

    def get_one(self, query):
        # 获取一个指定的值,并且将_id字段不返回
        return self.table.find_one(query, projection={'_id': False})

    def get_query_all(self, query):
        # 返回符合查询条件的所有值
        return self.table.find(query)

    def get_all(self):
        # 返回所有数据
        return self.table.find({})

    def add(self, kv_dict):
        # 插入一个字典值
        return self.table.insert_one(kv_dict)

    def delete(self, query):
        # 删除指定条件的所有值
        return self.table.delete_many(query)

    def is_exist(self, query):
        # 判断是否有值满足当前的查询条件
        ret = self.table.find_one(query)
        return ret is not None

    def update(self, query, kv_dict):
        # 更新记录,如果没有就会插入
        self.table.update_one(query, {
            '$set': kv_dict,
        }, upsert=True)

    def q_sort(self,column, order=1, query={}):
        # 查询结果后,按照column进行排序通过order来进行排序,默认为升序order:1,返回所有数据 降序为-1,
        return self.table.find(query).sort(column, order)


if __name__ == '__main__':
    ma = MongoAPI(db_name='Student', table_name="16jixinan")
    students = [{'id': 1, 'name': 'hhf', 'age': 22, 'hobby': ['足球', '篮球']},
                {'id': 2, 'name': 'jyf', 'age': 26, 'hobby': ['wzry', '篮球']},
                {'id': 25, 'name': 'pjl', 'age': 15, 'hobby': ['ship', '篮球']}]
    for student in students:
        # 去重插入
        ma.update({'id': student.get('id')}, student)

    students_all = ma.get_all()
    for student in students_all:
        print(student)
    print('--'*20)
    student_sort = ma.q_sort('age') # 按照age进行升序排序
    for student in student_sort:
        print(student)
    print('--' * 20)
    student_is_exist = ma.is_exist({'name': 'hhf'}) # 判读满足条件的记录是否存在
    print(student_is_exist)
    student_is_exist = ma.is_exist({'name': 'ww'})
    print(student_is_exist)

    ma.delete({'id': 2})  # 删除id为2的值

测试结果:

{'_id': ObjectId('5e96be7b8c584f65c8d0c35d'), 'id': 1, 'name': 'hhf', 'age': 22, 'hobby': ['足球', '篮球']}
{'_id': ObjectId('5e96be7b8c584f65c8d0c35f'), 'id': 25, 'name': 'pjl', 'age': 15, 'hobby': ['ship', '篮球']}
{'_id': ObjectId('5e96c44ab7333bc6ed6683be'), 'id': 2, 'age': 26, 'hobby': ['wzry', '篮球'], 'name': 'jyf'}
----------------------------------------
{'_id': ObjectId('5e96be7b8c584f65c8d0c35f'), 'id': 25, 'name': 'pjl', 'age': 15, 'hobby': ['ship', '篮球']}
{'_id': ObjectId('5e96be7b8c584f65c8d0c35d'), 'id': 1, 'name': 'hhf', 'age': 22, 'hobby': ['足球', '篮球']}
{'_id': ObjectId('5e96c44ab7333bc6ed6683be'), 'id': 2, 'age': 26, 'hobby': ['wzry', '篮球'], 'name': 'jyf'}
True
False
原文地址:https://www.cnblogs.com/jlxa162hhf/p/14161225.html