展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

python操作mongodb(二)

  • 案例1
import pymongo  #pip install pymongo安装python操作mongodb的模块
myclient=pymongo.MongoClient('mongodb://root:root@192.168.128.100:27017/')   #指定主机和端口号创建客户端
dblist = myclient.list_database_names()  # 查看MongoDB中存在的数据库
print(dblist)

mydb = myclient['mydb']  # 数据库使用:有则直接使用,没有的话数据库只有在内容插入后才会自动创建!
# print(" mydb   "+mydb)

collist = mydb.list_collection_names()  # 查看当前数据库中的表
print(collist)

mycol = mydb['person']  # 表(集合)使用:有则直接使用,没有的话集合只有在内容插入后才会创建!
print(mycol)

def insert():
    # 1.添加数据
    '''
    添加数据:
    (1)insert()----单条和多条插入:MongoDB3.2版本自之前
        db.collection.insert({})
        db.collection.insert([{},{}...])
    (2)3.2之后官方推荐:
        insert_one()----单条插入
            db.collection.insert_one({})
        insert_many()----多条插入
            db.collection.insert_many([{},{}...])
    '''
    #
    res1 = mycol.insert_many([{'name': 'a', 'age': 20, 'gender': 1}])
    print(res1)
    res2 = mycol.insert([{'name': 'b', 'age': 21, 'gender': 0}, {'name': 'c'}])
    print(res2)

    mydict = {"name": "Google", "alexa": "1", "url": "https://www.google.com"}
    mylist = [
        {"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
        {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
        {"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
        {"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
        {"name": "Github", "alexa": "109", "url": "https://www.github.com"}
    ]
    res3 = mycol.insert_one(mydict)
    print(res3)
    res4 = mycol.insert_many(mylist)
    print(res4)

def query():
    #MongoDB中数据表的操作:
    #2.查询数据
    '''
    查询数据:
    (1)find()----查询符合条件的所有数据
        db.collection.find(查询条件)
    (2)find_one()----查询符合条件的第一条数据
        db.collection.find_one(查询条件)
    '''

    all=mycol.find()
    # all=mycol.find({'age':21})
    print(all)
    for doc in all:
        print(doc)

def update():
    one=mycol.find_one()
    one=mycol.find_one({'age':21})
    print(one)

    #3.修改数据(不存在即创建)
    '''
    (1)update()---只能修改查询出的第一条数据
        db.coolection.update({查询条件},{$修改器:{修改值}})
        修改器:认定当前修改的类型 $set设置类型修改器 强制修改某字段的值
    (2)3.2之后官方推荐:
        update_one()----修改查询结果的第一条数据
            db.colleciton.update_one({查询条件},{$修改器:{修改值}})
        update_many()----修改查询结果所有数据
            db.colleciton.update_many({查询条件},{$修改器:{修改值}})
    '''
    res5=mycol.update({'name':'c'},{'$set':{'age':23}})
    print(res5)

    res6=mycol.update_one({'name':'d'},{'$set':{'age':30,'gender':1}})
    print(res6)
    res7=mycol.update_many({'name':'c'},{'$set':{'age':22}})
    print(res7)

def delete():
    #4.删除数据

    '''
    (1)remove()----不在推荐使用
        db.collection.remove(查询条件)----删除符合查询结果的所有数据
    (2)3.2之后官方推荐:
        delete_one()----删除查询结果的第一条数据
            db.colleciton.delete_one(查询条件)
        delete_many()----删除查询结果的所有数据
            db.colleciton.delete_many(查询条件)
    '''
    # res8=mycol.remove({'age':22})
    # print(res8)

    res9=mycol.delete_one({'name':'c'})
    print(res9)

    res10=mycol.delete_many({'name':'a'})
    print(res10)

def other():
    #5.数据排序+跳跃+范围
    '''
    对查询结果进行排序、跳跃取值、范围截取
    
    (1)sort(filed,pymongo.ASCENDING/pymongo.DESCENDING)----对查询结果升序/降序排序
            db.collection.find({}).sort()
    (2)skip(num)----对查询结果进行跳跃取值
            db.collection.find({}).skip()
    (3)limit(num)----对查询结果进行范围截取
            db.collection.find({}).limit()
    (4)优先级:sort>skip>limit,与使用时的顺序无关
            db.collection.find({}).sort().skip().limit()
            db.collection.find({}).limit().sort().skip()
            db.collection.find({}).skip().sort().limit()
    '''
    print('----------------------------')
    alldata1=mycol.find({}).sort('age',pymongo.ASCENDING)#升序
    for i in alldata1:
        print(i)
    print('----------------------------')
    alldata2=mycol.find({}).skip(8)
    for i in alldata2:
        print(i)
    print('----------------------------')
    alldata3=mycol.find({}).limit(2)
    for i in alldata3:
        print(i)

    #6.查询关键字
    '''
    (1)$and----并列查询
            db.collection.find({'$and':[{},{}...]})
    (2)$or----或条件查询
            db.collection.find({'$or':[{},{}...]})
    (3)$in----范围查询
            db.collection.find({field:{'$in':['',''...]}})
    (4)$all----子集查询
             db.collection.find({field:{'$all':['',''...]}})
    '''

    print('+++++++++++++++++++++++++++++++')
    res11=mycol.find({"name":'c'})
    for i in res11:
        print(i)

    print('+++++++++++++++++++++++++++++++')
    res12=mycol.find({'$and':[{'name':'c'},{'age':20}]})
    for i in res12:
        print(i)

    print('+++++++++++++++++++++++++++++++')
    res13=mycol.find({'$or':[{'name':'c'},{'name':'b'}]})
    for i in res13:
        print(i)

    print('+++++++++++++++++++++++++++++++')
    res14=mycol.find({'name':{'$in':['c','b']}})
    for i in res14:
        print(i)

    print('+++++++++++++++++++++++++++++++')
    # res15=mycol.find({'hobby':{'$all':['run','eat','swim']}})
    res15=mycol.find({'hobby':{'$all':['run','eat']}})
    for i in res15:
        print(i)

    #7.查询条件操作符(一般用于数字比较)
    '''
    (1)$lt----小于
        db.collection.find({field:{'$lt':value}})
    (2)$gt----大于
        db.collection.find({field:{'$gt':value}})
    (3)$eq----等于
        db.collection.find({field:{'$eq':value}})
    (4)$lte----小于等于
        db.collection.find({field:{'$lte':value}})
    (5)$gte----大于等于
        db.collection.find({field:{'$gte':value}})
    (6)$ne----不等于
        db.collection.find({field:{'$ne':value}})
    '''

    # mycol.insert_many([{'name':'d','age':18},{'name':'e','age':22},{'name':'f','age':32},])
    print("**************************************")
    res16=mycol.find({'age':{'$lt':21}})
    for i in res16:
        print(i)

    print("**************************************")
    res17=mycol.find({'age':{'$gt':21}})
    for i in res17:
        print(i)

    print("**************************************")
    res18=mycol.find({'age':{'$eq':21}})
    for i in res18:
        print(i)
    print("**************************************")
    res19=mycol.find({'age':{'$lte':21}})
    for i in res19:
        print(i)

    print("**************************************")
    res20=mycol.find({'age':{'$gte':21}})
    for i in res20:
        print(i)

    print("**************************************")
    res21=mycol.find({'age':{'$ne':21}})
    for i in res21:
        print(i)

    #8.$修改器 + $ 字符特殊用法
    '''
    (1)$set----修改某个字段的值
    (2)$unset---删除字段
    (3)$inc----引用增加(先引用 后增加)
    (4)针对数组操作:
        ①$push----在Array的最后一个位置中增加一个数据
        ②$pushAll----在Array的最后一个位置中增加多个数据
        ③$pull ----删除Array中的指定单个元素
        ④$pullAll ----删除Array中的指定多个元素
        ⑤$pop----删除Array中的第一个或者最后一个元素 正数是倒序删除 负数是正序删除
        ⑥$----存储当前(Array)符合条件的元素下标索引 ,只能存储最外层的 索引位置
    '''
    # mycol.update_one({'name':'c','age':20},{'$set':{'hobby':['swim,dump','sing']}})
    # mycol.update_one({'$and':[{'name':'c'},{'age':20}]},{"$unset":{'hobby':[1,2]}})
    # mycol.update_many({'name':{'$in':['d','e','f']}},{'$inc':{'age':2}})
    # mycol.update_one({'name':'b'},{'$push':{'hobby':['swim','sing']}})

    # mycol.update({'name':'c'},{'$pushAll':{'hobby':['sing','scrapy']}})#实际测试无法使用,报错:Unknown modifier: $pushAll
    # mycol.update_many({'name':'b'},{'$pullAll':{'hobby':['swim','play']}})#实际测试每次只删除一个元素

    # mycol.update_one({'hobby':'run'},{'$pull':{'hobby':'eat'}})
    # mycol.update_many({'hobby':'run'},{'$pop':{'hobby':1}})
    # mycol.update_many({'hobby':'run'},{'$pop':{'hobby':-1}})

    # mycol.update_many({'name':'c','age':{'$ne':20}},{'$set':{'hobby':['swim','sing']}})
    # mycol.update_many({'hobby':'run'},{'$push':{'hobby':'swim'}})

if __name__ == '__main__':
    insert()
    # query()
    # update()
    # delete()
posted @ 2024-01-11 15:32  DogLeftover  阅读(21)  评论(0编辑  收藏  举报