mongodb和python交互

mongodb和python交互

image-20220728012028477

安装环境

pip install pymongo==4.2.0

官方文档:https://pymongo.readthedocs.io/en/stable/

使用样例

引入包pymongo

import pymongo

连接,创建客户端

client = pymongo.MongoClient("localhost", 27017)
client = pymongo.MongoClient('mongodb://localhost:27017/')

获得数据库test1

db = client.test1
db = client['test']

获得集合movie

collection = db.movie
collection = db['movie']

添加数据

#增加一条
m1={name:'300集',actor:'高总',level:10}
m1_id = movie.insert_one(s1).inserted_id
#增加多条
mids = movie.insert_many([movie1,movie2])

注意

原insert方法也可以实现上面的功能,但是在PyMongo 3.x的版本已经不推荐使用了

查找数据

  • find() 返回一个生成器对象
  • find_one() 返回一条数据
    result = movie.find_one()
    result = movie.find_one({'name':'300集'})
    result = movie.find_one({'_id':OjectId('5932a80115c2606a59e8a049')})
    result = movie.find_one({level:{'$gt':1}})
    results = movie.find()
    

    比较符号

    符号 含义 示例
    $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]}}

    功能符号

    符号 含义 示例 示例含义
    $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'} 自身粉丝数等于关注数

    获取文档个数

  • count = movie.count_documents()

    排序

  • results = collection.find().sort('name', pymongo.ASCENDING)

    偏移/分页

    collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)

    更新

    result = collection.remove({'name': '300集'}) # 4.2版本不支持
    result = collection.delete_one({'name': '300集'})
    result = collection.delete_many({'age': {'$lt': 25}})

    注意

    update也可以实现上面的功能,但是在PyMongo 3.x的版本已经不推荐使用了

    删除

  • result = collection.remove({'name': '300集'}) # 4.2版本不支持
    result = collection.delete_one({'name': '300集'})
    result = collection.delete_many({'age': {'$lt': 25}})
    # pip install pymongo==4.2.0
    
    import pymongo
    # 创建链接
    client = pymongo.MongoClient()
    # 获取数据库实例
    db1 = client.bjsxt
    db2 = client['bjsxt']
    # 获取集合
    c1 = db1.student
    c2 = db2['person']
    # 操作数据
    def add_data():
        '''
        添加数据
        '''
        data1 = {'name':'张三','age':20,'score':100}
        data2 = {'name':'李四','age':22,'score':110}
        # c1.insert_one(data1)
        c1.insert_many([data1,data2])
    
    def update_data():
        # 改
        args = {'name':'张三'}
        # c1.update_one(args,{'$set':{'age':24}})
        c1.update_many(args,{'$set':{'age':23}})
    
    def delete_data():
        # 删除
        c1.delete_one({'name':'张三'})
        # 删除所有
        # c1.delete_many({})
    def search_data():
        # 查询数据
        rs1 = c2.find()  #获取游标对象,需要遍历
        for r in rs1:   
            print(r)
        # rs2 = c2.find_one()
        # print(rs2)
    def search_data_arg():
        # 查询数据
        rs1 = c2.find({'age':{'$gt':20}})  #获取游标对象,需要遍历
        for r in rs1:   
            print(r)
    def search_data_func():
        # 查询数据
        # rs1 = c2.find({'age':{'$gt':20}}).sort('age')  #获取游标对象,需要遍历
        # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.ASCENDING)  #升序
        # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING)  #降序
        # 分页
        # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING).skip(4)  #降序
        rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING).skip(4).limit(6)  #降序
        for r in rs1:   
            print(r)
    
    def search_data_count():
        count = c2.count_documents({})
        print(f'目前集合中有{count}条数据')
    
    
    
    if __name__ == '__main__':
        # add_data()
        # update_data()
        # delete_data()
        # search_data()
        # search_data_arg()
        # search_data_func()
        search_data_count()

     

posted @   jiang_jiayun  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示