美文网首页
MongoDB学习笔记

MongoDB学习笔记

作者: python与数据分析 | 来源:发表于2019-11-27 16:43 被阅读0次

    mongo属于nosql非关系数据库。

    一、关系与非关系数据库区别:

    1、数据和数据之间不存在关系,每条数据独立个体存在字典之中;
    2、mysql扩展性差,大数据量下IO压力大,表结构更改困难;
    3、mongo易扩展,大数据量高性能(读写),灵活的数据模型(无需事先为要存储的数据建立字段),高可用;
    4、mongo占硬盘空间大

    二、mongo基础命令
    查看当前数据库:db
    查看所有数据库:show dbs
    切换数据库:use 库名
    删除当前数据库:db.dropDatabase()(db表示当前数据库)
    自动创建数据库和集合(相当于mysql的表),不需要手动创建,插入文档(相当mysql中的记录)时自动创建
    手动创建数据库和集合:db.createCollection("集合名")
    查看集合:show collections
    删除集合:db.集合名称.drop()
    
    三、mongo存储数据类型
    image.png
    四、mongo增删改查
    1、增
    image.png
    *注:
    db.集合名称.save(ducument)
    如果文档id已存在,则修改,如果不存在则添加
    
    2、查
    查询所有数据:db.集合名.find() 
    查询一条数据:db.集合名.findone({键:值}).pretty()
    等于 :默认是等于判断,没有运算符
    小于:$It
    小于等于:$Ite
    大于:$gt
    大于等于:$gte
    不等于:$ne
    eg:
      db.集合名.find({age:{$gte:18}})
    
    ①判断是否在某个范围内
    使用$in, $nin
    eg:
      db.集合名.find({age:{$in:[18,28,38]}})
    
    ②多个条件同时:and
    eg:
      db.集合名.find({age:{$gte:18},gender:true})
    
    ③条件之间是或的关系:$or
    eg:
      db.集合名.find({$or:[{age:{$gte:18}},{gender:true}]})
      db.集合名.find({$or:[{age:{$gte:18}},{gender:true}],name:'zs'})
    
    ④支持正则表达式
    匹配以abc开头的:
    db.集合名.find({sku:/^abc/})
    匹配以789结尾的:
    db.集合名.find({sku:{$regex:'789$'}})
    
    ⑤limit,skip
    limit:用于读取指定数量的文档
    skip:用于跳过是定数量的文档(相当于翻页)
    eg:
      db.集合名.find().skip(2).limit(2)
    
    ⑥投影
    从查询到的返回结果中,只选择必要的字段
    值为1表示显示,0表是不显示(一般不用写),_id是默认显示的  
    eg:
      db.集合名.find({},{字段名称:1,_id:0}) 
    
    ⑦排序 sort()
    db.集合名.find().sort(字段:1,……)
    参数1:升序
    参数-1:降序
    
    ⑧统计个数 count
    两种方式:
    db.集合名.find({条件}).count()
    db.集合名.count({条件})
    
    ⑨去重 distinct
    db.集合名.distinct('去重字段',{条件})
    db.集合名.count({条件})
    
    3、改
    image.png
    *注:
    尽量用$set,代表指定键值,如果不指定,会替代原来所有的字段
    
    4、删
    image.png

    五、数据的备份与恢复

    备份:
    mongodump -h dbhost -d dbname -o dbdirectory
    -h 服务器地址 ,也可以指定端口号
    -d 需要备份的数据库名称
    -o 备份的数据存放位置,此目录存放着备份出来的数据
    
    恢复:
    mongorestore -h dbhost -d dbname -o dbdirectory
    -h 服务器地址 ,也可以指定端口号
    -d 需要恢复的数据库实例
    -o 备份的数据所在的位置
    

    五、聚合

    聚合是基于数据处理的聚合管道(管道:前一次结果交给下一次使用),每个文档通过一个由多个阶段组成的管道,可以对每个阶段的管道进行分组,过滤等功能,然后经过一系列的处理,输出相应的结果。

    db.集合名称.aggregate({管道:{表达式}})
    常用管道如下:
    $group:将集合中的文档分组,可用于统计结果
    $match:过滤数据,只输出符合条件的文档
    $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
    $sort:将输入文档排序后输出
    $limit:限制聚合管道返回的文档数
    $skip:跳过指定数量的文档,并返回余下的文档
    $unwind:将数据类型的字段进行拆分
    
    image.png

    实例数据如下(集合名为excle):

    image.png
    #1、 按部门分组,并求出各部门人数
     db.excle.aggregate({$group:{_id:"$部门",count:{$sum:1}}})
    
    image.png
    #2、 将上图结果中的_id更改为'部门',并将_id隐藏
     db.excle.aggregate({$group:{_id:"$部门",count:{$sum:1}}},{$project:{部门:"$_id",count:1, _id:-1}})
    
    image.png
    #3、 工龄在一年及以上,各部门人数
    db.excle.aggregate({$match:{工龄:{$gte:"1"}}},{$group:{_id:"$部门",count:{$sum:1}}},{$project:{_id:0,部门:"$_id",count:1}})
    
    image.png
    注意:
    1、$group对应的字典中有几个键,结果中就有几个键
    2、 分组依据需要放到'_id'后面
    3、取不同字段的值需要使用$,$age
    

    六、索引

    索引:以提升查询速度

    db.集合名.ensureIndex({属性:1})
    1表示升序,-1表示降序
    
    image.png

    数据去重:使用数据库建立关键字段的唯一索引进行去重
    通过多个字段判断数据的唯一性:主要用到联合索引

    相关文章

      网友评论

          本文标题:MongoDB学习笔记

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