mongodb入门

  1. 一:mongoDB的基本概念

    1. 几个重要的网站

      1. mongoDB的官网:mongodb.org
      2. mongoDB国内官方网站,mongoing.com
      3. http://docs.mongoing.com/ 国内网站的文档子站 ,不是很完善db的
      4. mongodb的github
      5. mongodb的jir
      6. mongodb-cn,mongodb-user
    2. 为什么选择mongoDB?

      1. 无数据结构限制
        1. 没有表结构的概念,每条记录可以有完全不同的结构
        2. 业务开发方便快捷
        3. sql数据库需要事先定义表结构在使用
      2. 完全的索引支持
        1. redis的key-value(速度很快,但是只提供了一种查询方式,根据键查询,不够灵活)
        2. hbase,查询很快,但是是单索引,二级索引需要自己实现
        3. mogodb索引支持:单键索引、多建索引、数组索引、全文索引、地理位置索引
      3. 方便的冗余与拓展
        1. 复制集保证数据安全(一份数据保存3分,保证安全)
        2. 分片拓展数据规模,可以很方便的进行数据规模的拓展。包含了自动数据均衡,简单的扩容和缩容,同时t提供了对数据库的统一访问入口,不需要再应用层进行分发,减少了人力
      4. 良好的支持
        1. 完善的文档
        2. 齐全的驱动支持
  2. mongoDB的安装和配置

  3. mongoDb的增删改查

    1. 删除
      1. 删除一条数据:db.demo_1.remove({x:20})
      2. 删除数据表:db.demo_1.drop()
    2. 更新:
      1. 根据条件更新,更新数据全部字段(update)
        1. 更新_id=1的数据,数据更改为:x=123。db.demo_1.update({_id:1},{x:123})
        2. 更新_id=1的数据,数据更改为{z:123,a:1111}。db.demo_1.update({_id:1},{z:123,a:1111})
      2. 更新部分字段(update,set)
        1. db.demo_1.update({'_id':1},{$set:{'z':2222}})。注意:条件和数据的字段要和查询的数据保持一致
      3. 更新不存在的数据(update的第三个参数为true)
      4. 更新多条数据
        1. mongoDB默认是更新符合条件的第一条数据
        2. update第四个参数设置为true,并且只能使用set形式
    3. 查询:
      1. 查询集合下的所有数据:db.demo_1.find()
        1. 查询条件:查询_id为1的数据:db.demo_1.find({_id:1})
      2. 查询集合下的总条数:db.demo_1.find().count()
      3. 复杂查询:从第几条开始返回几条按什么排序
        1. db.demo_1.find().skip(10).limit(3).sort({x:1})
        2.  
    4. 插入

      1. db.数据集名称.insert(数据字符串)

        1. 例:db.demo_1.insert({x:2,_id:1})。_id是一个不能重复的值,可以指定,也可以由系统自动生成
      2. 批量插入
        1. for(i=3;i<=1000;i++)db.demo_1.insert({x:i})
  4. mongoDB的索引

    1. MongoDB索引简介

      1. 索引的种类与使用

        1. _id索引
          1. _id索引是绝大多数集合默认建立的索引 
          2. 对于每个插入的数据,mongoDB都会自动生成一条唯一的_id字段
        2. 单键索引
          1. 单键索引是最普通的索引
          2. 单键索引不会自动创建
          3. 语法:db.demo_1.ensureIndex({x:1})
        3. 多键索引
          1. 多键索引与单键索引创建形式相同,区别在于字段的值
          2. 单键索引:值为一个单一的值,例如字符串、数字和日期。
          3. 多键索引:值具有多个记录,例如数组。
          4. 示例:db.demo_1.insert({x:[1,2,3,4]})。插入一个x值为数组的数据,x如果ensureIndex建立了索引,则为多键索引
        4. 复合索引
          1. 当我们的查询条件不只有一个时,就需要建立符合索引
          2. 语法:db.demo_1.ensureIndex({x:1,y:1})。使用x,y条件进行查询就可以使用索引
        5. 过期索引
          1. 过期索引是在一段时间后会过期的索引
          2. 在索引过期后,相应的数据也会被删除
          3. 适合存储一些在一段时间之后会失效的数据,比如用户登录信息,存储日志。
          4. 使用限制:
            1. 存储在过期索引字段的值必须是自定的时间类型。必须是ISODate或者ISODate数组,不能使用时间戳,否则无法自动删除。
            2. 如果指定了ISODate数组,则按最小的删除
            3. 过期索引不能是复合索引
            4. 删除时间是不精确的
              1. 删除过程是由mongoDB在后台没60s跑一次的,而且删除也需要时间,所以有误差。
          5. 语法:
            1. 创建索引(time字段为索引,30秒后过期):db.demo_2.ensureIndex({time:1},{expireAfterSeconds:30})
            2. 增加数据:db.demo_2.insert({time:new Date()})。time字段,值为ISODate
        6. 全文索引
          1. 举例:
          2. 建立的语法:
            1. 在mongodb中,每一个数据集合只允许创建一个全文索引。
            2. 和建立普通索引一样,区别是普通索引的值为1或者-1,全文索引的值固定为text
            3. db.demo_2.ensureIndex({key:"text"})。根据单个字段key 建立全文索引
            4. db.demo_2.ensureIndex({key1:"text",key2:"text"})。
            5. db.demo_2.ensureIndex({"$**":"text"})。key不在是具体值,表示对集合中的所有字段创建一个大的全文索引
          3. 如何使用全文索引进行查询
            1. 单个关键词:db.demo_1.find($text:{$search:"wlz"})
            2. 多个关键词,用空格隔开,默认或关系:db.demo_1.find($text:{$search:"wlz xiaomin"})
            3. 多个关键词,不包含某关键词。
              1. db.demo_1.find($text:{$search:"wlz  -xiaomin"})。(值有wlz,且不包含xiaomin)
            4. 多个关键字,每个关键字是与的关系。
              1. 关键字用双引号包起来就是且的关系。
              2. db.demo_1.find($text:{$search:"\"wlz\"  xiaomin lic"})。必须有wlz且xiaomin或lic
          4. 全文索引相似度
            1. $meta操作符:{score:{$meta:"textScore"}}。
            2. 写在查询条件后面可以返回返回结果相似度score字段。
            3. 与sort一起使用可以达到很好的效果。
            4. 示例:
              1. db.demo_1.find({$text:{$search:"aa bb"}},{socre:{$meta:"textScore"}}).sort({socre:{$meta:"textScore"}})
          5. 全文索引的使用限制
            1. 每次查询只能指定一个$text查询
            2. $text查询不能出现在$nor查询中
            3. 查询中如果包含了$text,hint不在起作用。hint是强制使用某个索引
            4. mongoDB全文索引不支持中文(新版已经支持了)
        7.  地理位置索引
          1. 简介:
            1. 概念:将一些点的位置存储在mongodb中,创建索引后,可以按照位置来查找其他点。
            2. 子分类:
              1. 2d索引,用于存储和查找平面上的点
              2. 2dsphere,用于存储和查找球面上的点
              3. 两者的区别是计算距离使用平面距离还是球面距离
            3. 查找方式:
              1. 查找包含在某个区域内的点
              2. 查找距离某个点一定距离内的点
          2. 创建地理位置索引
            1. 2D索引
              1. ​​​​​​​语法:db.location.ensureIndex({"w":"2d"})。
              2. 位置表示方式:经纬度[经度,纬度]。取值范围:经度[-180,180],纬度[-90,90]
              3. 插入数据:db.locaion.insert({w:[30,30]})
              4. 查询方式
                1. 查询方式​:​​​​​​$near:查询距离某个点最近的点,默认查出来一百个,可以通过$maxDistance限制范围。
                  1. $
                2. 查询方式:$geoWithin:查询某个形状内的点。
                  1. $box,矩形
                  2. $center,圆形
                  3. $polygon:多边形
                  4. 示例:
                3. 查询方式3:$geoNear,比near更高级
                  1. geoNear使用runCommand命令进行使用
            2. 2Dsphere索引
              1. 概念:球面地理位置索引
              2. 创建方式:db.demo_1.ensureIndex({w:"2dsphere"})
              3. 位置表示方式:GeoJSON:描述一个点,一条直线,多边形等形状。
              4. 格式:json数据,有type和coordinates
              5. 查询方式和2D相似,但是支持$minDistance和maxDistance。
              6. 支持交叉点查询
      2. 索引的属性

        1. 名字,name指定
          1. mongodb会默认给数据命名,一般是索引名称key_1。例:wlz_1_a_-1
          2. 组合索引这样使用系统自定义命名,可能会超出限制的字节长度,也不直观
          3. 语法:db_demo_2.ensureIndex({a:1},{name:"normal_index"})
          4. 删除索引的时候可以使用索引名称进行删除:db.demo_2.dropIndex("normal_index")。
        2. 索引的唯一性(unique)
          1. 语法:db_demo_2.ensureIndex({a:1},{unique:true})
          2. 则a字段数据唯一,类似于mysql的unique索引
        3. 稀疏性,sparse指定
          1. 语法:db_demo_2.ensureIndex({a:1},{sparse:true})
          2. 默认下,mogodb创建的索引都是不稀疏的
        4. 过期属性
          1. 使用expireAfterSeconds指定
          2. 语法:db.demo_2.ensureIndex({time:1},{expireAfterSeconds:30})
      3. 索引的建立情况评估

        1. 索引的优缺点:
          1. 索引的好处:加快索引相关的查询
          2. 索引的不好:增加磁盘空间消耗,写入速度变慢。
        2. 如何判断当前索引情况
          1. mongostat工具
            1.  
          2. profie集合介绍
          3. 日志介绍
          4. explain介绍
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值