Mongodb基本知识

Mongodb数据库,集合,文档

文档:

文档是Mongodb中的核心概念。文档就是键值对的有序集合。相似于ruby中的hash,python中的dict或是javascript中的对象。javascript

能够只有一个键值对,也能够设置对个键值对。java

  • 文档中的值能够是多种不一样的数据类型(甚至是一个内嵌的文档),"greeting"的值是一个字符串,"foo"的值是一个整数
  • 键区分大小写
  • 文档的键是字符串,除了少数状况下,键可使用任意的UTF8字符
    • 键不能含有\0(空字符)。这个字符用于表示键的结尾
    • .和$具备特殊意义,一般这两个字符被保留
    • 一个文档中不能有重复的键
"greeting": "Hello, World"}

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

文档中的键/值是有序的 {"x": 1, "y": 2}与{"y": 2, "x": 1} 是不一样的。在某些特殊状况下,字段顺序变得很是重要。python

 

集合

简单的来讲:集合就是一组文档,若是将Mongodb中的一个文档比喻为关系型数据库中的一行,那么一个集合就至关于一张表正则表达式

集合命名

  集合使用名称进行表示。集合名能够是知足下列条件的任意UTF8字符串mongodb

  • 集合名不能是空字符串("")
  • 集合名不能包含\0字符(空字符),这个字符表示集合名的结束
  • 集合名不能以"system"开头,这是为系统集合保留的前缀,例如, system.users这个集合保存着数据库的用户信息,而system.namespace集合保存着全部数据库的集合信息
  • 用户穿件的集合不能再集合名中保留字符“$”。由于某些系统生成的集合中包含$,不少驱动程序确实支持在集合名中包含该字符,除非你要访问这种系统建立的集合,不然不该该在集合名中包含$

 

数据库

在Mongodb中,多个文档组成集合,而多个集合能够组成数据库。每一个数据库拥有0个或者多个集合,每一个数据库都有独立的权限,即使是在磁盘上,不一样的数据库也防止在不一样的文件中。按照经验咱们把一个应用程序的全部数据都存储在一个数据库中。要想在MongoDB服务器上存放多个应用程序或者用户程序就须要使用不一样的数据库。shell

有一些数据库是保留的admin数据库

  • 从身份验证的角度来说,这是“root”数据库。若是将一个用户添加到admin数据库,这个用户将自动得到全部数据库的权限。再者,一些特定的服务端命令也只能从admin数据库运行,例如列出全部数据库或者关闭服务器
  • local
    这个数据库永远都不能复制,且一台服务器上的全部本地集合均可以存储在这个数据库中。
  • config
    MongoDB用于分片设置时,分片信息会存储在config数据库中

把数据库名添加到集合名前,获得集合的彻底限定名,即命名空间。若是要使用cms数据库中的blog.post集合那么这个集合的命名空间就是cms.blog.post。命名空间的长度不能超过121字节,且在实际使用中应小于100字符。数组

 

 

MongoDB shell

mongo 命令进入mongodb shell 在此shell 中能够执行 JavaScript代码ruby

 

MongoDB 数据类型

MongoDB基本数据类型

  • null
    null 用于表示空值或者不存在的字段:
     {"x": null} 

  • 布尔型
    布尔类型有两个值true和false
     {"x": true} 

  • 数值
    shell默认使用64位浮点型数值,所以如下数值在shell中是很“正常的”:
     {"x": 3.14} 或 {"x": 3} 或{"x": NumberInt("3")} // 4字节带符号整数 {"x": NumberLong("3")} // 8字节带符号整数 

     

  • 字符串
    UTF8字符串均可以表示为字符创类型的数据
     {"x": "foobar"} 


  • 日期
    日期被存储为自新纪元雨来通过的毫秒数,不储存时区:
     {"x": new Date()} 

  • 正则表达式
    查询时,使用正则表达式做为限定条件,语法也和JavaScript的正则表达式语法相同:
     {"x": /foobar/i} 

  • 数组
    数据列表或数据集能够表示为数组:
     {"x": ["a", "b", "c"]} 

  • 内嵌文档
    文档可嵌套其余文档,被嵌套的文档做为父文档的值:

     {"x": {"foo": "bar"}} 

    服务器

  • 对象ID
    对象ID是一个12字节的ID,是文档惟一标识:
     {"x": ObjectId()} 

还有些不那么经常使用可是有可能用获得的类型:

  • 二进制数据
    二进制数据是任意字节的字符串,他不能直接带shell中使用

  • 代码
    查询和文档中能够包括任意的JavaScript代码:
     {"x": function() {/*....*/}} 

 

MongoDB shell 

shell 能够链接到本地的mongod实例,并且能够经过该shell链接到任何MongoDB实例

$ mongo some-host:30000/myDB
MongoDB shell version: 2.4.0
connecting to: some-host:30000/myDB
>

如今咱们就链接到了some-host:30000上的myDB数据库.

也能够经过--nodb 不链接任何数据库进入shell

$ » mongo --nodb                                                                                                                            apple@apple-Pro
MongoDB shell version v4.0.3
>

启动后能够在须要时运行new Mongo命令就能够链接MongoDB

~/Documents/demo/go_demo » mongo --nodb                                                                                                                              apple@apple-Pro
MongoDB shell version v4.0.3
> conn = new Mongo("some-host:30000")
> db = conn.getDB("myDb")
myDb