MongoDB学习笔记2
基本概念
实例 | 一个实例可以拥有多个相互独立的数据库 | instance |
---|---|---|
数据库 | 数据库拥有自己的集合,一个或多个 | database |
集合 | 集合可以看作是一个拥有动态模式(dynamic schema)的表 | collection |
文档 | 数据的基本单元,类似于关系型数据库管理系统中的行,都有一个特殊的键“_id”,这个键在文档所属的集合中是唯一的 | file |
- 文档
1 | //例文档 |
文档的键是字符串
- 键不能含有\0(空字符),这个字符用于表示键的结尾
- . 和$具有特殊的意义,只能在特定环境下使用
MongoDB区分类型和大小写
文档不能有重复的键
文档的键/值对是有序的
集合
集合就是一组文档
动态模式
动态模式意味着一个集合里的文档可以是多种多样的,尽管MongoDB没有强制要求,我们还是要创建一个模式,把相关文档组合在一起
- 方便开发者,管理者
- 分开查询多个集合速度快
- 把相同类型的文档放在一个集合里,数据会更加集中
- 更有效地对集合进行索引
集合命名
- 集合名不能是“”(空字符串)
- 集合名不能包含\0字符
- 集合名不能以 system. 开头
- 用户创建的集合,不能在集合名中包含保留字符 $
子集合
组织集合的一种惯例是使用 . 分隔不同命名空间的子集合。例如一个具有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors,这里的 blog 集合跟他的子集合没有任何关系。
在MongoDB中,使用子集合来组织数据非常高效。
数据库
每个数据库由0个或多个集合组成,都有独立的权限,即便是在磁盘上,不同的数据库也放在不同的文件中。按照经验,我们将有关一个应用程序的所有数据都存储在同一个数据库中。
数据库最终会变成系统里的文件,而数据库名就是相应的文件名
保留名字的数据库,可以直接访问这些具有特殊语义的数据库
admin | 从身份验证角度讲,这是 “root” 数据库。如果将一个用户添加到admin数据库,这个用户将自动获得所有数据库的权限。再者,一些特定服务器端命令也只能从admin数据库运行,如列出所有数据库或关闭服务器。 |
---|---|
local | 这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。 |
config | 分片设置,分片信息会存储在config数据库。 |
把数据库名添加到集合名前,得到集合的完全限定名,即命名空间(namespace)。例如,cms.blog.posts
MongoDB shell简介
MongoDB自带JavaScript shell,可在shell中使用命令行与MongoDB实例交互。
mongo
启动shell,启动时shell将自动连接MongoDB服务器,须确保mongod已启动。- shell是一个功能完备的JavaScript解释器,可运行任意JS程序
1 | //简单的数学运算 |
需要注意,可使用多行命令。shell会检测输入的JS语句是否完整,如没写完可在下一行接着写。在某行连续三次按下回车键可取消输入未完成的命令,并退回到提示符。
MongoDB客户端
shell是一个独立的MongoDB客户端。启动时,shell会连接到MongoDB服务器的test数据库,并将数据库连接赋值给全局变量db。这个变量是通过shell访问MongoDB的主要入口点。
1 | //查看db当前指向哪个数据库 |
- shell中的基本操作 CRUD
- 创建 C
1 | //insert函数,可将一个文档添加到集合中 |
- 读取
1 | //find和findOne方法。若只想查看一个文档,可用findOne |
find和findOne可以接受一个查询文档作为限定条件。
show dbs
空的数据库是不显示出来的
- 更新
1 | //update接受(至少)两个参数:第一个是限定条件(用于匹配待更新的文档),第二个是新文档 |
- 删除
1 | //remove方法,没有任何参数,它会将集合内的所有文档全部删除。它可以接受一个作为限定条件的文档作为参数 |
- 数据类型
在概念上,MongoDB的文档与JS中的对象类似,可认为它类似于JSON.MongoDB在保留JSON基本键/值对的基础上,增添了一些其他的数据类型。
名称 定义 例子 null 空值或者不存在的字段 {“x”:null} 布尔型 true/false {“x”:true} 数值/NumberInt/NumberLong 默认使用64位浮点型 {“x”:3.14}/{“x”:NumberInt(“3”)}/{“x”:NumberLong(“3”)} 字符串 {“x”:“foobar”} 日期 {“x”:new Date()} 正则表达式 查询时,使用正则表达式作为限定条件,语法与JS相同 {“x”:/foobar/i} 数组 {“x”:[1,2,3]} 内嵌文档 文档可内嵌其他文档 {“x”:{“foo”:”bar”}} 对象id 对象id是一个12字节的ID,是文档的唯一标识 {“x”:ObjectId()} 二进制数据 代码 Js代码 {“x”:function() {/ … /}}
- Any question please contact 1-riverfish