• mongodb基本使用


    一、mongodb简介

    MongoDB是一个基于分布式文件存储的数据库,是介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    二、安装与配置

    https://blog.csdn.net/congcong68/article/details/44277469

    三、mongodb的增删改查

    (一)数据库操作

    1 use blog  #切换数据库,没有时会创建
    3 show dbs    #查看所有的数据库(数据库必须有数据才会显示)
    5 db.dropDatabase()   #删除数据库

    (二)collection操作

    集合就是相当于关系数据库中的表

    1 use blog  #切换数据库
    2 db.article.insert({'title':'python'})  #创建集合article并插入数据,db指当前用的数据库
    3 show tables    #查看集合(表)
    4 db.article.drop()   #删除集合

    (三)文档操作

    文档相当于关系数据库中的记录

    1、添加文档

    1 user0 = {'name':'alex',...}
    2 db.test.insert(user0)   #插入单条
    3 user1 = {...}
    4 user2 = {...}
    5 user3 = {...}
    6 db.test.insertMany([user1,user2,user3])   #插入多条

    2、查看文档

     1 db.user.find()  #查看集合中所有文档
     2 db.user.find().pretty()  #格式化展示输出结果
     3 db.user.findOne()   #只取匹配成功的第一个
     4 
     5 db.user.find({相当于where条件},{相当于select条件})
     6 
     7 ###########比较运算##########
     8 '$gt','$lt','$gte','$lte','$ne' 分别代表大于、小于、大于等于、小于等于、不等于
     9 
    10 db.user.find({'name':'alex'})   #查询name等于alex的
    11 
    12 db.user.find({'name':{"$ne":'alex'}})  # #查询name不等于alex的
    13 
    14 db.user.find({'_id':{'$gt':2}})   #id大于2的
    15 
    16 db.user.find({"_id":{"$gte":2,}})  #id大于等于2的
    17 
    18 
    19 ###########逻辑运算##########
    20 '$or'  或;'$not' 非;字典中多个条件用逗号分隔是and关系
    21 
    22 db.user.find({'_id':{"$gte":2,"$lt":4}}  #id大于等于2,小于4的
    23 db.user.find({"_id":{"$gte":2},"age":{"$lt":40}}) #id等于2,年龄小于40的
    24 
    25 db.user.find({"$or":[{'_id':{"$gte":5}}, {"name":"alex"} ]})  #id大于等于5或name等于alex的
    26 
    27 db.user.find({'_id':{"$mod":[2,1]}})  #id除以2余数为1的
    28 
    29 db.user.find({'_id':{"$not":{"$mod":[2,1]}}})  #id除以2余数为1的 
    30   取反
    31 
    32 ###########成员运算##########
    33 db.user.find({'age':{'$in':[20,30,31]}})  #in
    34 
    35 db.user.find({'age':{'$nin':[20,30]}})    # not in 
    36 
    37 
    38 ###########正则匹配##########
    39 /正则表达式/i ,i表示模式
    40 db.user.find({'name':/^j.*?(g|n)$/i})  
    41 
    42 ###########取指定的字段##########
    43 
    44 db.user.find({'_id':3},{''name':1,'age':1})  #1表示取,0表示不取
    45 注意:{''name':1,'age':1},字典内要么都是1,要么都是0,不能既有1又有0,但是'_id'除外
    46 
    47 ###########查询数组##########
    48 直接用点取值
    49 
    50 db.user.find({'hobbies':'dancing'})  #查询hobbies对应列表中有dancing的人
    51 db.user.find({"hobbies.3":'tea'})  #查询hobbies对应列表的第四个值为tea的
    52 
    53 db.user.find({},{'hobbies':{"$slice":-2})#查询所有人最后两个爱好
    54 
    55 ###########排序##########
    56 
    57 db.user.find().sort({"age":-1,'_id':1})  # 1代表升序,-1代表降序
    58 
    59 ###########分页##########
    60 
    61 db.user.find().sort({'age':1}).limit(1).skip(2)  #limit代表取多少个,skip代表跳过前面多少个
    62 
    63 ###########统计数量##########
    64 
    65 db.user.count({'age':{"$gt":30}})
    66 或  db.user.find({'age':{"$gt":30}}).count()
    67 
    68 ###########其他##########
    69 {'key':null} 匹配key的值为null或者没有这个key
    70 
    71 db.t2.find({"b":null})  #b为null或没有b的

    3、更新文档

     1 ######### update()方法 #######
     2 
     3 对比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18;
     4 
     5 update() 方法用于更新已存在的文档。语法格式如下:
     6 db.collection.update(
     7    <query>,     //查询条件,相当于where
     8    <update>,    //update的对象和一些更新的操作符,相当于set
     9    {
    10      upsert: <boolean>,  //可选,默认false,代表不存在update的记录不更新也不插入,设为true,表示插入
    11      multi: <boolean>,    // 可选,默认false,代表只更新找到的第一条几录,设为true,代表更新全部
    12      writeConcern: <document>  //可选,抛出异常的级别
    13    }
    14 )
     1 #########覆盖更新#######
     2 用新的文档替换匹配的文档
     3 db.user.update({'age':20},{"name":"Wxx","hobbies_count":3})#是用{"_id":2,"name":"Wxx","hobbies_count":3}覆盖原来的记录
     4 
     5 #########局部更新#######
     6 只更新文档的一部分内容
     7 
     8 db.user.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true})   #没匹配成功会新插入一条
     9 
    10 db.user.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true})   #更新多条
    11 
    12 #########自增自减#######
    13 db.user.update({},{ "$inc":{"age":1}}, { "multi":true }) #所有人年龄加一岁
    14 db.user.update({},{ "$inc":{"age":-1}}, { "multi":true })  #所有人年龄减一岁
    15 
    16 #########添加删除数组内的元素#######
    17 添加删除数组内元素:$push,$pop,$pull
    18 
    19 #1、为名字为yuanhao的人添加一个爱好read
    20 db.user.update({"name":"yuanhao"},{"$push":{"hobbies":"read"}})
    21  
    22 #2、为名字为yuanhao的人一次添加多个爱好tea,dancing
    23 db.user.update({"name":"yuanhao"},{"$push":{
    24     "hobbies":{"$each":["tea","dancing"]}
    25 }})
    26 
    27 按照位置且只能从开头或结尾删除元素:$pop
    28 #3、{"$pop":{"key":1}} 从数组末尾删除一个元素
    29  
    30 db.user.update({"name":"yuanhao"},{"$pop":{
    31     "hobbies":1}
    32 })
    33  
    34 #4、{"$pop":{"key":-1}} 从头部删除
    35 db.user.update({"name":"yuanhao"},{"$pop":{
    36     "hobbies":-1}
    37 })
    38 
    39 #5、按照条件删除元素,:"$pull" 把符合条件的统统删掉,而$pop只能从两端删
    40 db.user.update({'addr.country':"China"},{"$pull":{
    41     "hobbies":"read"}},{ "multi":true})
    42 
    43 #########避免重复添加#######
    44 "$addToSet"
    45 
    46 db.urls.insert({"_id":1,"urls":[]})
    47 
    48 #下面只会添加一次
    49 db.urls.update({"_id":1},{"$addToSet":{'urls':'http://baidu'}})
    50 db.urls.update({"_id":1},{"$addToSet":{'urls':'http://baidu'}})

    4、删除文档

    1 #1、删除多个中的第一个
    2 db.user.deleteOne({ 'age': 8 })
    3  
    4 #2、删除国家为China的全部
    5 db.user.deleteMany( {'addr.country': 'China'} )
    6  
    7 #3、删除全部
    8 db.user.deleteMany({}) 

    四、在python中的使用---pymongo模块 

    基本使用:

    #插入单个文档
    result = collection.insert(student)
    print(result)
    
    #插入多个文档
    result = collection.insert([student1, student2])
    print(result)
    
    # 实际上在PyMongo 3.X版本中,insert()方法官方已经不推荐使用了,当然继续使用也没有什么问题,
    # 官方推荐使用insert_one()和insert_many()方法将插入单条和多条记录分开。
     1 import pymongo
     2 
     3 client = pymongo.MongoClient(host='localhost',port=27017)
     4 
     5 #指定数据库
     6 db = client.blog
     7 print(db)
     8 #指定集合
     9 collection = db.user
    10 #查询多个
    11 # for el in collection.find():
    12 #     print(el)
    13 
    14 #只返回查询到的第一个结果
    15 # result = collection.find_one({'age':{'$gt':10}})
    16 # print(result)
    17 
    18 
    19 #使用正则查询
    20 res = collection.find({'name':{'$regex':'^w.*'}})
    21 # for el in res:
    22 #     print(el)
    23 
    24 #计数
    25 count = collection.find().count()
    26 print(count)
    27 
    28 #排序  多个条件
    29 ret = collection.find().sort([('name',pymongo.ASCENDING),('age',pymongo.DESCENDING)])
    30 for el in ret:
    31     print(el)
     1 #对于数据更新可以使用update()方法,指定更新的条件和更新后的数据即可
     2 condition = {'name': 'Kevin'}
     3 student = collection.find_one(condition)
     4 student['age'] = 25
     5 result = collection.update(condition, student)
     6 print(result)
     7 
     8 #update()方法其实也是官方不推荐使用的方法,在这里也分了#update_one()方法和update_many()方法,用法更加严格,
     9 # 第二个参数需要使用$类型操作符作为字典的键名
    10 condition = {'name': 'Kevin'}
    11 student = collection.find_one(condition)
    12 student['age'] = 26
    13 result = collection.update_one(condition, {'$set': student})
    14 print(result)
    15 print(result.matched_count, result.modified_count)
    16 # 在这里调用了update_one方法,第二个参数不能再直接传入修改后的字典,而是需要使用{'$set': student}这样的形式,
    17 # 其返回结果是UpdateResult类型,然后调用matched_count和modified_count属性分别可以获得匹配的数据条数和影响的数据条数。
    18   
    19 # 运行结果:
    20 # <pymongo.results.UpdateResult object at 0x10d17b678>
    21 # 1 0
    22 
    23 condition = {'age': {'$gt': 20}}
    24 result = collection.update_many(condition, {'$inc': {'age': 1}})
    25 print(result)
    26 print(result.matched_count, result.modified_count)
    27 # 这时候匹配条数就不再为1条了,运行结果如下:
    28 #
    29 # <pymongo.results.UpdateResult object at 0x10c6384c8>
    30 # 3 3
    #删除

    直接调用remove()方法指定删除的条件即可,符合条件的所有数据均会被删除 result = collection.remove({'name': 'Kevin'}) print(result) # 运行结果: # # {'ok': 1, 'n': 1} # 另外依然存在两个新的推荐方法,delete_one()和delete_many()方法,示例如下: result = collection.delete_one({'name': 'Kevin'}) print(result) print(result.deleted_count) result = collection.delete_many({'age': {'$lt': 25}}) print(result.deleted_count) # 运行结果: # <pymongo.results.DeleteResult object at 0x10e6ba4c8> # 1 # 4 # delete_one()即删除第一条符合条件的数据,delete_many()即删除所有符合条件的数据,返回结果是DeleteResult类型, # 可以调用deleted_count属性获取删除的数据条数。

    关于$的其他功能符号:

    # 在这里将一些功能符号再归类如下:
    """
    符号含义示例示例含义
    $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'}自身粉丝数等于关注数
    """
  • 相关阅读:
    python实现RSA加密解密方法
    信息安全-2:python之hill密码算法[原创]
    信息安全-4:公钥密码体制之背包算法[原创]
    python之import子目录文件
    python之路径导入
    python之局部变量引用赋值前的结果
    python之socket-ssh实例
    python之面向对象与构造函数
    git搜索--grep
    git日志--log
  • 原文地址:https://www.cnblogs.com/zhang-yl/p/10483124.html
Copyright © 2020-2023  润新知