Mongodb基本知识

Mongodb数据库,集合,文档

文档:

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

可以只有一个键值对,也可以设置对个键值对。

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

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

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

集合

简单的来说:集合就是一组文档,如果将Mongodb中的一个文档比喻为关系型数据库中的一行,那么一个集合就相当于一张表

集合命名

  集合使用名称进行表示。集合名可以是满足下列条件的任意UTF8字符串

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

数据库

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

有一些数据库是保留的admin

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

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

MongoDB shell

mongo 命令进入mongodb shell 在此shell 中可以执行 JavaScript代码

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
原文地址:https://www.cnblogs.com/Stay-J/p/10806310.html