美文网首页Pyhton
Python操作MongoDB

Python操作MongoDB

作者: HeloWxl | 来源:发表于2019-12-18 23:41 被阅读0次

    1、目录

    • 1.连接数据库
    • 2.添加数据
    • 3.更新数据
    • 4.查询数据
    • 5.嵌套文档/查询嵌入

    2、连接数据库

    '''
        连接MongoDB数据库的两种方式
        1.无用户认证
        2.用户认证
    '''
    

    2.1 无用户认证

    from pymongo import MongoClient
    
    # 创建对象,连接本地的数据库(无用户认证)
    # 方法一
    client = MongoClient()
    
    # 方法二
    client1 = MongoClient('localhost',27017)
    
    # 方法三
    client2 = MongoClient('mongodb://localhost:27017')
    
    # 连接数据库
    
    db = client['db']
    
    # 连接集合user,集合类似于关系数据库的数据表
    # 如果集合不存在的情况下,就会新创建集合user
    
    user_collection = db.user
    

    2.2 用户验证

    # 用户认证一
    client3 = MongoClient()
    db_auth = client3.admin
    db_auth.authenticate('username','password')
    db = client3['db']
    
    # 用户认证二
    client4 = MongoClient('mongodb://username:password@localhost:27017')
    db = client4['db']
    

    3、添加数据

    3.1 单条数据

    # 用户信息
    user_info = {
        'name':'wangxianlin',
        'age':22,
        'hobbies':[
            'LOL','Movie'
        ],
        'addr':{
            'country':'China',
            'city':'合肥'
        }
    }
    # 插入数据库 单条插入,并返回_id
    user_id = mdb_collection.insert_one(user_info).inserted_id
    print(user_id)
    
    image.png

    3.2 多条数据插入

    # 插入数据库 多条插入
    user_infos = [{
        'name':'wanglong',
        'age':22,
        'hobbies':[
            'LOL','Movie','play cs','cs go'
        ],
        'addr':{
            'country':'China',
            'city':'北京'
        }
    },
    {
        'name':'Helos',
        'age':23,
        'hobbies':[
            'LOL','Movie','dota'
        ],
        'addr':{
            'country':'China',
            'city':'上海'
        }
    }
    ]
    # 插入多条数据,同时获取到插入的_id
    user_ids = mdb_collection.insert_many(user_infos).inserted_ids
    print(user_ids)
    
    image.png

    4、更新数据

    常用的更新操作符:

        1. $set : 用来指定一个键的值,如果这个键不存在,就创建它,如果存在,就执行更新。
        2. $unset: 从文档中移除指定的键
        3. $inc: 修改器用来增加已有键的值,或者在键不存在时创建一个键。只能用于证书,长整数或者双精度浮点数。要是用在其他类型的数据上,就会导致操作失败。
        4. $rename: 操作符可以重命名字段名称,新的字段名称不能和文档中现有的字段名相同。如果文档中存在A,B字段,将B字段重命名为A字段,$rename会将A字段和值移除掉,然后将B字段名修改为A。
        5. $push: 如果指定的键已经存在,就会向已有的数组末尾加入一个元素;如果指定的键不存在,就会创建一个新的数组。
    

    4.1 更新单条文档

    • 关键字:update_one
      update_one{筛选条件,更新内容}。如果筛选的条件为空,默认更新第一条文档
    mdb_collection.update_one(
        {},#筛选条件
        {
            "$set":{'age':18,'name':'HeloWxl'}#更新内容
        }
    )
    #查询更新后的文档
    result = mdb_collection.find(
        {"_id":123}
    )
    print(list(result))
    

    4.2 更新多条文档

    • 关键字:update_many
      将年龄大于等于18 的用户,将年龄都修改为18
    mdb_collection.update_many(
        {
            "age":{"$gte":18}
    
         },#筛选条件
        {
            "$set":{'age':18}#更新内容
        }
    )
    
    # 查询出年龄大于18的用户
    result = mdb_collection.find(
        {
            "age":{"$gte":18}
        }
    )
    print(list(result))
    

    5、查询数据

    5.1 普通查询

    查询关键字:find

    • 不带条件查询
    #如果查询的条件为空的时候,则默认为查询全部的数据
    result = mdb_collection.find(
        {}
    )
    print(list(result))
    
    image.png
    • 带条件查询
    #查询_id = 123的数据
    result = mdb_collection.find(
        {'_id':123}
    )
    print(list(result))
    

    5.2 多条件查询

    • 查询操作符 and or
    # $and  and操作符    $or or 操作符
    #$and 操作符
    result = mdb_collection.find(
        {"$and":[{'_id':123,'name':'HeloWxl'}]}
    )
    print(list(result))
    
    #$or 操作符
    result = mdb_collection.find(
        {"$or":[{'name':'HeloWxl'},{'name':'Helos'}]}
    )
    print(list(result))
    
    • 大于,小于操作符
    $lt 小于
    $lte 小于等于
    $gt 大于
    $gte 大于等于
    $in (in,符合范围内)
    $nin (not in ,范围之外)
    #$lt $gt 操作符
    result = mdb_collection.find(
        {
            "age":{"$lt":30,"$gt":20}
        }
    )
    print(list(result))   
      
    #$in 操作符
    result = mdb_collection.find(
        {
            "age":
                {
                "$in":[18,20,30]
                }
        }
    )
    print(list(result)) 
    

    比较查询和多条件查询存在明显的区别:

    • 1.多条件查询是以操作符为字典的键,比较查询以字段为字典的键。
      -2.多条件查询的值是列表格式的,比较查询的值是字典格式的。

    5.3 模糊查询

    模糊查询实际上是加入正则表达式实现

    #方法一
    result = mdb_collection.find(
        {
            "name":{"$regex":'.*xianlin.*'}
        }
    )
    print(list(result))
    
    import re
    # 方法二
    regex = re.compile('.*xianlin.*')
    result = mdb_collection.find(
        {
            "name":regex
        }
    )
    print(list(result))
    

    6、嵌套文档/查询嵌入

    #查询 addr : {city:'合肥'}
    #查询嵌套的字段,只需要查询嵌套的某个值即可
    result = mdb_collection.find(
        {'addr.city':'合肥'}
    )
    print(list(result))
    
    # 如果在addr里面还嵌套一个文档
    result = mdb_collection.find(
        {'addr.city.code':'1002'}
    )
    print(list(result))
    

    相关文章

      网友评论

        本文标题:Python操作MongoDB

        本文链接:https://www.haomeiwen.com/subject/endpnctx.html