mongo使用

、 mongodb 简介

  • mongdb 优势
    方便使用:mongodb数据库不是关系型数据库,而是一个面向文档的数据库,mongodb取代了关系型数据库中的行,取而代之的是文档,通过 文档中嵌入文档还有数组,可以很清晰表示出复杂的数据关系;另外不在使预定类型,文档中的建和值没有固定的大小和类型
    扩展性好:在大数据量的几天,mongodb使用的是横向扩展,在庞大数据我们一般通过横向扩展或者是纵向扩展,所谓横向就是通过集群,将大数据多处理分配到多个集群机器中,而纵向扩展就是通过使用性能更好的一台机器完成大数据量的处理操作。面向文档的mogodb使的数据能够轻易在多个服务器中记性分割,mongodb可以自动处理跨集群的负载和数据,能够自动重新分配文档、可以正确将请求路由到对应的服务器上。如果集群中需要更大的容量,那么只需要添加进新的服务器,mongodb会吧数据自动传输到新的服务器上。
    丰富的功能:mongodb提供通用的二级索引、mongodb支持聚合、特殊的集合类型如会话、文件存储
    注意:mongodb 没有关系型数据库中的一些功能,比如连接join以及使用多行事物,因为在大数据的分布式系统中,有些功能通常是很难高效的实现的。
    丰富的功能:保证高性能,mongodb 设计上面将很大部分设计成为缓存cachae,保证高效查询对应的数据

、 mongodb 基础知识

  • 文档
    文档类型与关系型数据库中的行,是mongodb的基本数据单元,但是它不同于行记录,它更具有对复杂数据的表现力,我们可以通过一行数据表达出很复杂的数居关系。每一个文档都存在一个_id,在文档所属的集合中改值是唯一的
    文档是mongodb 建值对的一个有序集,在操作mongodb上面很多的语言对文档的表示不太一样,但是很多的语言基本上来讲是相通的,因为各种语言对集合都有着想通的数据结构,比如map、hash、字典比如在js中文档被表示为对象{“”,”“};文档中的值 可以是不同的类型,甚至,文档中的值 可以是一个内嵌的文档。文档中的建一般是字符串,除了少数情况之外。一般来讲我们可以使用任意的utf-8字符声明一个建。
    注意:建中不能存在空字符,这个表示建的结尾,mongo 区分类型而且区分大小写,mongo中的.以及$有着特殊的含义相当于是关键字吧,mongo中不能存在重复键 ,这个是非法而不会覆盖数据,mongo中是存在顺序的,不同的建值顺序是不同的文档。
  • 集合
    集合可以看做是一张表,里面存储文档。
    集合是动态模式的,也就是说,集合中可以存在各种各样的文档比如说是,好比就是map中可以存放键值对,但是不约束键值对的类型。那么各种文档都可以放在一个集合中,我们还需要区分集合来存储文档吗,解释:

    命名规则:
    集合不能是空、不能包含空格、不能以system.开头系统保留的集合这些是,不要包含字符$。
    

    子集合
    我们使用.来区分不同命名空间的子集合,这样可以使我们的结构更加的清晰,比如我们使用bolk.author,bolk.atitle来标识博客的文章集合还有博客的作者集合,其实bolk其实是可以不用存在的。mongodb自带的也有非常多的工具用到了自己和比如GFile ,这个是mongodb一个存储大文件的工具。

  • 数据库
    mongodb的一个实例可以存在多个数据库,多个数据库之间可以存储自己的多个集合
    多个文档组成了一个集合,多个集合组成了一个数据库,mongodb实例可以承载多个数据库,每一个数据看在物理上面就是对应一个文件。

    命名规则:
    基本上只能使用ascl码中的数字以及字母
    基本上和集合类似,区分大小写。
    数据库终将变成文件,二数据库的名称就是对应文件的名称,所以才导致这么多的约束的原因。
    

    使用show dbs,可以看到如下几个数据库:
    admin
    从用户身份对的角度来说,这个就是root数据库相当于,里面包含了各种数据库级别的权限,如果将一个用户添加进入admin数据库将获取所有数据库的权限。。而且一些服务器上面的命令只能通过admin数据库上面运行,比如服务器上的关闭。
    local
    无法复制的数据库,本地集合都可以存储在这个数据库上面。
    config
    mongodb 进行分片设置时,分片信息会存储在这个数据库中。

  • shell操作
    mongodb自带了一个shell 能够完成,mongodb的数据操作以及自身的管理,是一个功能完备的js解释器,能够解释任何的js程序。能够运行js程序,而且它还是一个独立的mongodb的客户端。在启动时,客户端会自动连接到test数据库,并且将连接信息,赋值给全局变量db,那么db就代表了当前的数据库,通过db点操作可以获取当前数据库中的集合
    增删改查:

    添加文档,通过insert(),将一个文档插入当前的集合中

    可以通过find()查询当前集合中所有的文档,但是shell最多也就显示20个匹配的文档,也可以通过findOne()查询一个文档,

    使用update ,两个参数,一个用户接受遍历的条件,一个作为新的文档修改原先的文档数据

    使用remove(),如果没有任何的限定条件,那么就会删除所有的数据,并且是永久的删除,可以添加限定条件删除制定的数据

  • 数据类型
    mongodb不仅支持基本的json的数据类型,但是基本的json数据类型表达能力太局限,在json基础上面,有添加了更多的数据类型。
    null
    {“z”:null}标识空或者不存在的字段
    bool类型
    true,false
    整数(使用64位)
    文档
    日期
    正则表达式
    数组
    对象id ObjectId(),从这里可以看出mongodb设计理念,可以交给客户端处理的事情不要交给服务端处理,减轻服务端的压力

  • 执行js脚本
    由于是一个js解释器,shell当然可以直接运行js脚本,使用load加载对应磁盘下的js文件,如果无参数就是当前目录下面对应的js文件,使用run方法查找脚本。对于一些启动加载的脚本可以直接放在.mongorc.js,这个位置在你的用户目录下(linux、window都是一样的),找这个文件的时候你会发现已经存咋,并且0kb,通过这个文件我们可以自定义一些全局变量,移除一些危险的辅助行数,比如删除数据库等操作,添加一些提示信息,在window是中我们可以自定义编辑器对变量进行编辑
    比如我们制定shell的编辑器EDITOR=”F:\editplus\editplus.exe”,制定本地的编辑器,然后对变量进行编辑edit wap会自动使用本地的编辑器打开变量进行编辑,这个只是临时生效,如果要每一次重启之后都能生效在 .mongorc.js 配置编辑器的位置
    通常集合名称很可能很怪异,我们可以通过db[name]来进行访问,通过db.name有可能访问无效

、 文档操作

  • 添加
    批量插入batchInsert()接收的是一个文档数组作为插入对象,批量操作不支持回滚,一旦中间某一个数据失败,之前的数据将成功插入,但是之后的数据全部失败无法插入数据库内。
  • 删除文档
    使用remove如果不带参数将删除制定集合下面所有的数据,删除remove是无事务的执行之后删除无法恢复,不能撤消。
    使用drop删除整个集合速度很快。
  • 更新文档
    使用update,两个参数一个是条件,一个是新的对象,是原子性的不可分割,最后更新的将会成为最后的结果。
  • 修改器
    incwindowshell使 i n c 自 增 ( 在 w i n d o w s h e l l 使 用 无 效 ) set 修改文档中某一个键的值
    还有很多对数组上面的比如$push等等。
    可以使用getLastError()获取最新的更新数据,比如上面有status,n代表更新的文档数

、 查找
find、findOne有参数
第一个参数是查询条件,可以传入多个参数,被理解成为是多个and条件查询
第二个参数制定是需要返回的字段属性值(但是_id 总是被返回),使用name:1 这个1代表返回,默认是所有属性设置成为,如果要剔除那么设置成为0

  • 查询条件

     $lt,$lte,$gt,$gte---><,<=,>,>=
     db.blog.findOne({title:{$lt:1}})
     这种比较尤其是对日期范围查询非常的有帮助
    
  • or查询

    mongodb有两种方式进行or查询
    使用 $in,相当于关系型数据库中的in操作,对应就是 $nin
    使用$or,更加直观这个就很是or
    

    上面的两种查询都是将查询条件存放在一个数组里面
    notoraclenotnull使 n o t 可 以 放 在 很 多 的 查 询 条 件 上 面 , 相 当 于 取 反 , 这 个 相 当 于 o r a c l e n o t 操 作 n u l l 一 种 数 据 类 型 , 我 们 可 以 通 过 使 用 exits判断是否已经存在,在匹配条件上面我们也可以使用正则表达式,比如我们可以这么写 {“name”:/joe/i}代表查询字符创joe 并且不区分大小写,而且mongodb中的正则表达式可以匹配到自身

  • 数组查询
    使用数组查询、是查询数组内是否包含指定的元素值

        $all可以匹配多个文档内的数组中的元素值,$all needs an array"
        $size 可以用来查询制定长度的数组
        $slice 返回前几条或者是后几条数据,或者是指定位置的数组的位置的数据
    

    使用eleMatch可以让数组中的每一个元素都比较制定的条件,如果我们对键做了索引那么我们可以使用min还有max函数进行数据排查
    使用$where可以在查询中执行任意的js,但是尽量不要用 ,因为太慢

  • 游标
    事实上查询返回的是一个游标,我们可以使用变量进行接收,然后我们可以使用foreach进行数据的遍历
    总结:条件文档是内层文档的键,修改器是外层文档的键

、 索引
默认对于_id索引已经存在,可以认为就是主键索引,
复合索引
对多个键进行添加索引,组合起来就是复合索引
多键索引的方向
覆盖索引
、 聚合
使用聚合使用管道操作获取文档数据

你可能感兴趣的:(学习)