学前知识

文档

文档, 如同关系型数据库中的行,多个键及其关联的值有序的放在一起便是文档;如:

{ "greeting": "Hello MongoDB"}

绝大多数情况下文档会包含多个键/值对:

{ "greeting": "Hello MongoDB", "foo", 3 }

文档中键的顺序并不重要;

文档的键必须是字符串,除了少数情况外皮,键还可以使用任意 UTF-8 字符:

  • 健不能包含有 \0 (空字符),这个字符用来表示键的结尾;

  • .$ 有特别的意义,只有在特定环境下才能使用;

  • 以下划线 (_) 开头的键是保留的;

  • 文档的键是区分大小写的,并且同一个文档不能有重复的键;

集合

集合, 就是一组文档,如同关系型数据库中的表;

集合名可以是满足以下条件的任意 UTF-8 字符串:

  • 集合名不能是空字符串;

  • 集合名不能包含有 \0 字符,这个字符表示集合名的结尾;

  • 集合名不能以 system 开头,这是为系统集合保留的前缀;

  • 用户创建的集合名字不能包含保留字符,如 $

数据库

MongoDB,中多个文档组成集合,同样多个集合组成数据库;

数据库名可以是满足以下条件的任意 UTF-8 字符串:

  • 不能是空字符串;

  • 不得包含有 ""(空格)、.$/\``和\0(空字符);

  • 应全部小写;

  • 最多 64 字节;

数据库名最终会变成文件系统里的文件,有些数据库是保留的如:

  • admin:从权限的角度看,这是 root 数据库;

  • local:这个数据库不会被复制,可以用来存储限于本地单台服务的任意集合;

  • config:当 MongoDB 用于分片设置时,这个数据库在内部使用,用于保存分片的相关信息

把数据库的名字放到集合名前,得到的就是集合的完整限定名,称为命名空间

MongoDB默认监听 27017 端口;

mongod会启动一个非常基本的 HTTP 服务器,监听数字比主端口高 1000 的端口也就是 28017

常用操作

  • show dbs, 查询所有数据库;

      > show dbs
      blog    0.203125GB
      local    0.078125GB
      test    0.203125GB
      >
    
  • use DBName, 选择要使用的数据库或创建新数据库;

    use 一个新数据库,实际上还并没有真正创建数据库,只是说明目前是在使用这个新的数据库,当有数据插入的时候才会真正创建它

      > use blog
      switched to db blog
      > db
      blog
    
  • show collections,查看当前 db 的所有集合;

      > show collections
      blogs
      system.indexes
      >
    
  • MongoDB 默认将当前数据库赋值给 db 变量,以后的所有操作都使用 db.变量来访问其中的集合;

    多数情况下使用 db. 来访问集合不会有问题,但如果集合名恰好是数据库类的一个属性就有问题了,这个时候可以使用 getCollection() 函数来访问,如:

    db.version 会返回数据库函数,这个时候就可以用 db.getCollection('version')

      $ mongo
      MongoDB shell version: 2.4.9
      connecting to: test
      > db
      test
      > db.version
      function (){
          return this.serverBuildInfo().version;
      }
      > db.getCollection('version')
      test.version
    
  • db.dropDatabase, 删除当前使用的数据库

  • 数据库有四个基本操作:创建(create)、读取(read)、更新(update)和删除(delete) CRUD,都是在 db变量上完成的