zoukankan      html  css  js  c++  java
  • 自定义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
    
  • 相关阅读:
    NOIP2010 关押罪犯
    NOIP2010 乌龟棋
    static属性
    数组的拷贝
    数组在类中的声明与创建
    两个数组之间的引用
    java数组实现买彩票(二个一维数组的比较思想)
    java数组实现买彩票(通过标识符进行判断的思想)
    java数组实现买彩票(重复则重新遍历查询思想)
    java数组实现买彩票(平移覆盖思想)
  • 原文地址:https://www.cnblogs.com/jlxa162hhf/p/14161225.html
Copyright © 2011-2022 走看看