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