• python操作mongoDB(pymongo的使用)


    pymongo操作手册

    连接数据库

    • 方法一(推荐)
    import pymongo
    client = pymongo.MongoClient(host="localhost",port=27017)
    
    • 方法二
    import pymongo
    client = pymongo.MongoClient(host="mongodb://127.0.0.1:27017/")
    

    指定数据库

    • 方法一(推荐)
    db = client["dbName"]	# 指定dbName数据库
    
    • 方法二
    db = client.test
    

    指定集合

    • 方法一(推荐)
    collection = db["colName"]	# 指定colName集合
    
    • 方法二
    collection = db.colName
    

    插入数据

    insert()

    insert()方法可以插入一条或多条数据,返回主键_id_id列表

    插入一条数据示例

    person_1 = {
        "name": "kainhuck",
        "gender": "boy",
        "hobby": [
            "python", "golang", "dart"
        ]
    }
    
    ret = collection.insert(person_1)
    print(ret)	# 输出: 5e575bc1601c0c6e37bbde3b
    

    插入多条示例

    person_1 = {
        "name": "kainhuck",
        "gender": "boy",
        "hobby": [
            "python", "golang", "dart"
        ]
    }
    person_2 = {
        "name": "kainhuck",
        "gender": "boy",
        "hobby": [
            "python", "golang", "dart"
        ]
    }
    
    ret = collection.insert([person_1, person_2])
    print(ret)	
    # 输出: [ObjectId('5e575c417c310d22c0fda767'), ObjectId('5e575c417c310d22c0fda768')]
    

    但是现在官方已经不推荐使用该方法,而是使用下面两种方法

    insert_one()

    插入单条记录,返回InsertOneResult对象

    通过 inserted_id 属性获取_id

    person_1 = {
        "name": "kainhuck",
        "gender": "boy",
        "hobby": [
            "python", "golang", "dart"
        ]
    }
    
    ret = collection.insert_one(person_1)
    print(ret)	# 输出: <pymongo.results.InsertOneResult object at 0x7fbebae38b00>
    print(ret.inserted_id)	# 输出: 5e575d179fd474694b4b0d76
    

    insert_many()

    插入多条数据,返回InsertManyResult对象

    通过 inserted_ids 属性获取_id列表

    person_1 = {
        "name": "kainhuck",
        "gender": "boy",
        "hobby": [
            "python", "golang", "dart"
        ]
    }
    person_2 = {
        "name": "kainhuck",
        "gender": "boy",
        "hobby": [
            "python", "golang", "dart"
        ]
    }
    
    ret = collection.insert_many([person_1, person_2])
    print(ret)	# 输出: <pymongo.results.InsertManyResult object at 0x7fc17e7a8d80>
    print(ret.inserted_ids)	
    # 输出: [ObjectId('5e575de663ea85cf36ac6083'), ObjectId('5e575de663ea85cf36ac6084')]
    

    查询数据

    查询参数语法同 MongoDB语法

    符号 含义 示例
    $lt 小于 {'age': {'$lt': 20}}
    $gt 大于 {'age': {'$gt': 20}}
    $lte 小于等于 {'age': {'$lte': 20}}
    $gte 大于等于 {'age': {'$gte': 20}}
    $ne 不等于 {'age': {'$ne': 20}}
    $in 在范围内 {'age': {'$in': [20, 23]}}
    $nin 不在范围内 {'age': {'$nin': [20, 23]}}

    另外,还可以进行正则匹配查询。例如,查询名字以M开头的学生数据,示例如下:

    results = collection.find({'name': {'$regex': '^M.*'}})
    

    这里使用$regex来指定正则匹配,^M.*代表以M开头的正则表达式。

    这里将一些功能符号再归类为下表。

    符号 含义 示例 示例含义
    $regex 匹配正则表达式 {'name': {'$regex': '^M.*'}} name以M开头
    $exists 属性是否存在 {'name': {'$exists': True}} name属性存在
    $type 类型判断 {'age': {'$type': 'int'}} age的类型为int
    $mod 数字模操作 {'age': {'$mod': [5, 0]}} 年龄模5余0
    $text 文本查询 {'$text': {'$search': 'Mike'}} text类型的属性中包含Mike字符串
    $where 高级条件查询 {'$where': 'obj.fans_count == obj.follows_count'} 自身粉丝数等于关注数

    find_one()

    返回一个结果,dict类型或者None

    per = collection.find_one({"name": "kainhuck"})
    print(per)
    # 输出:
    # {'_id': ObjectId('5e575bb73570a50e5dea473a'), 'name': 'kainhuck', 'gender': 'boy', 'hobby': ['python', 'golang', 'dart']}
    

    find()

    返回多个结果,是一个迭代器

    不加参数表示全部查询

    pers = collection.find({"name": "kainhuck"})
    for each in pers:
        print(each)
    

    count_documents()

    统计满足条件的个数

    不加参数表示统计所有个数

    count = collection.count_documents({"name": "kainhuck"})
    print(count)
    

    sort()

    将返回结果按条件排序,返回迭代起

    pymongo.ASCENDING 升序

    pymongo.DESCENDING 降序

    返回迭代器

    results = db.collection.find().sort('name', pymongo.ASCENDING) # 升序(默认)
    
    results = db.collection.find().sort('name', pymongo.DESCENDING)  #降序
    
    # 多列排序
    results = db.collection.find().sort([
      ("name", pymongo.ASCENDING),("age", pymongo.DESCENDING)
    ])
    

    skip()

    跳过记录数

    0 代表不跳过

    返回迭代器

    results = collection.find().skip(10)
    

    limit()

    返回上限

    0 代表无上限

    返回迭代器

    results = collection.find().limit(10)
    

    更新数据

    查询参数语法同 MongoDB语法

    update_one()

    修改单条文档,返回结果是UpdateResult类型

    调用matched_countmodified_count属性分别获取匹配的条数和影响的条数

    ret = collection.update_one({"name": "kainhuck"}, {"$set": {"gender": "girl"}})
    print(ret.matched_count)	# 输出: 1
    print(ret.modified_count)	# 输出: 1
    

    update_many()

    修改多条文档,返回结果是UpdateResult类型

    调用matched_countmodified_count属性分别获取匹配的条数和影响的条数

    ret = collection.update_many({"name": "kainhuck"}, {"$set": {"gender": "girl"}})
    print(ret.matched_count)	# 输出: 9
    print(ret.modified_count)	# 输出: 8
    

    删除数据

    remove()

    删除指定条件的所有数据

    result = db.collection.remove({"age" : {"$gte" : 10}})
    
    print(result)  # {'ok': 3, 'n': 3}
    

    delete_one()

    删除第一条符合条件的数据,返回DeleteResult类型数据

    result = collection.delete_one({'name': 'kainhuck'})
    print(result.deleted_count)  # 1
    

    delete_many()

    删除所有符合条件的数据,返回DeleteResult类型数据

    result = collection.delete_many({'name': 'kainhuck'})
    print(result.deleted_count)  # 8
    

    其他方法

    • find_one_and_delete()
    • find_one_and_replace()
    • find_one_and_update()
  • 相关阅读:
    手把手教你进行R语言的安装及安装过程中相关问题解决方案
    一篇文章助你理解Python3中字符串编码问题
    一篇文章助你理解Python2中字符串编码问题
    浅谈unicode编码和utf-8编码的关系
    网络爬虫过程中5种网页去重方法简要介绍
    手把手教你如何安装水晶易表——靠谱的安装教程
    在Windows上如何安装和彻底卸载Adobe Flash Player教程
    java 类的执行顺序
    bean的二次加工-Spring5.X后置处理器BeanPostProcessor
    Spring里面bean的生命周期里面的init和destroy方法
  • 原文地址:https://www.cnblogs.com/kainhuck/p/12374962.html
Copyright © 2020-2023  润新知