MongoDB基本概念
更新时间:2023-12-30 02:29:01 阅读量: 教育文库 文档下载
- mongodb基本概念推荐度:
- 相关推荐
MongoDB基本概念
MongoDB是面向集合的文档式数据库,不像关系数据库那样,有表,列、行,MongoDB数据库则是由一系列的文档组成。以下介绍MongoDB的基本概念
1 文档
文档是MongoDB数据库的最小集合单位,其基本概念为:由多个键及其关联的值有序组合在一起的集合单元。
如{“One”:3,”Two”:”Hello,MongoDB”}
从概念可以分析得,由多个键,即可说明文档的组成类似于hash表,每个键对应一个记录值,事实上,可以将文档看成关系数据库中的行,每个键值组合可以看成是这个行中对应的列,键表示列的名称,值则为表列值。
文档的值不仅可以是字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。文档的键是字符串,除了少数例外情况,键可以是任意UTF-8字符。
文档定义有如下要求:
1. 键不能含有\\0(空字符),在MongoDB中,这个字符用来表示的结尾 2. .和$有特别含义,在特定环境中使用,使用这两个字符时。需考虑清楚。 3. 以下划线“_”开头的键也是系统保留字符。使用时需要考虑清楚 4. 键是区分大小写的,如{“One”:”Hello”,”one’:”hello”},则表示不同的键
5. 在同一个文档中,不能有相同名称的键。即大小写都相同的键,如下面的文档是非
法的:
{“one”:”hello”,”one”:”helloworld”} 6. 文档中的键值的类型可以不一样的,如:
{“one”:1,”two”:”helloworld”,”three”:0.21}
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
7. 文档中的键/值对是有序的,下面两个文档是完全不同的:
{“One”:3,”Two”:”Hello,MongoDB”} {”Two”:”Hello,MongoDB” , “One”:3} 通常文档中的顺序并不重要。
2 集合
集合即是一组文档,如果说文档类似于行的话。则集合则相当于表。
在MongoDB中,集合是无模式的,即一个集合中的文档可以各式各样的。在集合中,不同的文档的键值数目可以不一样,其中的键也可以不一样。不同文档同一个键,其值可以不一样,类型也可不一样。也即在同一个集合中,文档是相互独立的。
由于集合没有模式,而在实际使用中,可能会造成困扰,因为既然没有什么模式,集合的文档可以是任意的,那么就没必要要多个集合了。比如,我们建立一个博客数据库,在一个集合中可以保存博客文章、文章类别、登录用户等数据。当然,这样把各种各样文档都混在一个集合里,无论对于开发还是管理都非常麻烦。在实际应用中,怎么运用还得看情况而定。
集合命令的规范。集合名可以是满足下列条件的任意UTF-8字符串:
1. 集合名不是能是空字符串;
2. 集合名不能含有\\0字符(空字符),MongoDB中此字符表示集合名的结尾; 3. 集合名不能以”system.”开头,因为此前缀是系统本身保留的前缀,如
system.uses表示系统用户信息,system.namespaces保存所有数据库集合的信息; 4. 集合名称不能有$字符。
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
3 子集合
子集合可以看成是一个命名,如blog.users,blog.author,在这里,blog本身可以不是集合,还可以不存在。使用子集合是为了更好更有条理的区分集合。
4 数据库
多个集合组成数据库。一个MongoDB实例中可以有多个数据库,每个数据库都是完全独立的,有自己的用户,权限信息,即便在磁盘上,其存储的文件也是分开的,这和SQL server之类的数据库一样。不同数据库其数据库文件可以存放在不同的目录。数据库命名规则如下:
1. 不能是空字符串;
2. 不得含有’’(空格)、.、$、/、\\、和\\0(空字符); 3. 应全部小写; 4. 最多64个字节。
除外,数据库名不能与现有系统保留库同名,如admin,local,及config。
数据库命名空间:数据库命名空间,是把数据库名称放在集合前面所得到的所有字符串信息。即为命名空间。如blog.article.author。命令空间的长度在实际运用中不能超过100个字符。
5 数据类型
MongoDB的文档使用BSON(Binary JSON)来组织数据,BSON类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、数组及对象),不能完全满足复杂业务的需要,因此,BSON还提供日期、32位数字、64位数字等类型。以下对MongoDB的类型进行简要说明:
1. null
null类型用于表示空值或不存在的字段,如:{“one”:null}。
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
2. 布尔类型
布尔类型有两个值,’true’和’false’ ,如:{“one”:true}。
3. 32位整数
在由于MongoDB的控制台使用JS引擎进行输入,而JS仅支持64位浮点数,所以32位整数将会被自动转义;
4. 64位整数
64位整数与32位整数一样,在MongoDB控制台使用时,会转义成64位浮点数。除外,如果数据库本身存储的数据类型无论是32位整数还是64位整数,使用MongoDB控制台获取后,更改其文档记录(即使没有修改整数本身,只修改了文档的其他部分),并重新使用控制台写回数据库,则其数据类型也会变成了64位浮点数。
除外,使用控制台查看一个64位整数时,可能会不正确定,原因是有些64位的整数不能精确表示为64位浮点数,而控制台呈示都是64位浮点数。
5. 64位浮点数
MongoDB控制台数字的默认类型,如:{“one”:2.02} {“one”:10}。
6. 字符串
UTF-8字符串都可以表示为字符串类型的数据,如:{“one”:”Hello World”}。
7. 符号
在MongoDB控制台中不支持这种类型,将自动转义成字符串;
8. 对象id
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
对象id是文档中唯一的12位的ID ,在MongoDB来存储文档时,必须有一个“_id”键,这个键可以是任何类型,如果在增加文档时,没有这个_id键,则系统会使用ObjectId对象自动生成一个,在分布式环境中,不同的机器都能用全局唯一的同种方法来生成值,其生成规则为:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 时间戳 | 机器 | PID | 计数器
前4位表示时间戳,时间戳以秒为单位,由于时间戳在前面,可以更好地反映出数据插入时的时间顺序,使的数据更容易查询,建立索引更加容易。 接下来的3字节是所在主机的唯一标识符,以确保不同的主机生成不同的ObjectId,不产生冲突。接下来两字节来自产生ObjectId的进程标识符(PID),以确保同一台机器上并发的多个进程产生的ObjectId是唯一的。最后3个字节是一个自动增加的计数器,确保相同进程同一秒产生的ObjectId也是不一样的。
虽然系统会自动创建_id键,但在高并发的应用下建议使用客户端的驱动程序来创建,主要原因是,尽管ObjectId可以生成,但是系统在生成时,还是会产生开销,增加数据库的负担。
9. 日期
日期类型是从标准纪元(公元1年)开始的始的毫秒数,不存储时区,如:{“one”:new Date()} ,注意,如果只使用Date()(没有new),则使用了JS本身自带的时间类型,包含了时区,如果在相同结构的文档使用了不一样的时间值,则可能会造成数据管理上不一致。
10. Timestamp类型
Timestamp类型从1.8版本开始支持,Timestamp有一个特殊的用法:timestamp类型的字段必须是位于文档的前两位。看下面例子:
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
11. 正则表达式
文档键值可以包含正则表达式,其正则表达式采用JS语法来表示,如:{“one”:/ho/i}
12. 代码
文档中可以包含JS代码 如:{“one”:function(){}}
13. 二进制数据
可以由任意字节的串组成,在MongoDB控制台中不能呈示。
14. 最大值
BSON包括一个特殊类型,表示可能的最大值。在MongoDB控制台中不能呈示。
15. 最小值
BSON包括一个特殊类型,表示可能的最小值。在MongoDB控制台中不能呈示。
16. 未定义
文档中也可以使用未定义类型,如{“x”:undefined}。
17. 数组
文档中的值可以表示为数组,但数组并没有严格控制数据内成员的类型,数组内成员其类型可以完全不一样,而且,在数组内还可以嵌套数组。
18. 内嵌文档
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
内嵌文档是将另一个文档当成这个文档中某个键的值。这样似乎更合理的体现了数据的关系,如我们要表示某个博客文章及其作者,在关系型数据库中,我们一般要建立两个表,一个表示表示博客文章(article),另一个则表示博客的作者(author),然后建立外键关系来控制,而在MongoDB中也可以这样表示 :
{“_id”: ObjectId(\
Test”,”article”:{“name”:wangXiao,”fullname”:”wangxiaolin”},”Content”:”Blos test”}
同样,我们也可将其设计成:
{“_id”: ObjectId(\ObjectId(\
{“_id”: ObjectId(\
分成两个文档来表示。而更好的是将其分成两个集合,一个是文章(article),一个是作者(author)。
虽然将文档加上子文档会更好体现数据间的关系,在查询时更容易查询到数据相关联的信息,但会造成数据冗余,不利于数据管理。当然,采用不同的设计方式,还需依使用场景来决定。
6 MongoDB shell
MongoDB自带一个JavaScript shell,通过它可以执行管理操作、检查运行实例,亦或做其他尝试。
6.1 运行shell
运行mongo启动shell:
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
Shell会在启动时自动连接MongoDB服务器,所以要确保在使用shell之前启动mongod。
6.2 MongoDB shell功能
Shell是功能完备的JavaScript解释器,可以运行任何JavaScript程序。
?
可以进行数学运算
?
可以使用标准的javascript库
注意:MongoDB中存储的时间是标准时间UTC +0:00 而咱们中国的时区是+8:00 。在C#中取回DateTime数据时候要转换成LocalTime格式,不然总会缺少8小时。
?
甚至可以定义javascript函数
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
6.3 MongoDB客户端
能够执行JavaScript确实很酷,但shell的真正威力还在于它是一个独立的MongoDB客户端。开启的时候,shell会连接到MongoDB服务器的test数据库,并将这个数据库连接赋值给全局变量db。这个变量是通过shell访问MongoDB的主要入口点。
shell还有些非JavaScript语法的扩展,是为了方便习惯于SQL shell的用户而添加的。
?
使用use命名切换数据库
可以通过db变量来访问其中的集合。例如db.baz返回当前数据库的baz集合。既然现在可以在shell中访问集合,那么基本上就可以执行几乎所有的数据库操作了。
?
使用insert函数向集合插入文档。
先创建一个本地变量叫post。
然后把它插入到叫blog的集合里边去。
然后我们可以用find函数看看blog里边的内容。
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
里边自动加了个叫\的key。
?
find返回集合里的所有文档,如果只想查看一个使用findone
? 使用update来更新文档
update函数要有至少两个参数,第一个是条件,第二个是新的文档。 先给post变量加一个叫comments的key,给它一个空数组做value。
执行更新,替换掉title是“My Blog Post”的那个文档
?
使用remove删除文档
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
现在blog集合就又空了。
江苏国泰国际集团新技术有限公司 http://www.epoint.com.cn Tel:0512-58282433
正在阅读:
MongoDB基本概念12-30
齿轮检验的3个公差组12-09
白族的风俗习惯02-06
爷爷和土的阅读答案12-01
重庆电大《创新教学》教学模式改革方案03-08
第一次上篮球社团作文350字06-26
施工组织设计(审批)05-24
海南大学生物技术实验中心05-24
监理细则(范本)09-24
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 概念
- MongoDB
- 基本
- 语文教学论文:浅谈信息技术与小学语文的有效整合
- 2017-2018学年人教版必修一 细胞中的糖类和脂质2 学案
- Hadoop视角下的Nutch爬行性能优化-2019年文档
- 关于行政事业单位档案管理创新的研究
- 西部大开发各省(市)经济发展的SWOT分析
- 托福写作 - --名人例子(一篇文章可多用)
- 新目标版初三英语完型填空与阅读理解竞赛题有答案
- 2016年高考数学练习题文科立体几何测试题
- 精细化工B卷
- XX医院远程医疗项目实施方案Word版42页 - 图文
- 火焰原子吸收分光光度法测定发中锌含量
- 2019-2020精选(长春版)一年级语文上册教案 小动物的家 2-优质教案
- 施工组织设计
- 典型营销故事
- 新形势下高校新生入学教育面临的挑战与对策
- 以意逆志
- 力与物体的直线运动
- 2014年人教版小学二年级数学上册期末试卷
- 细胞生物学练习题1—6章内容
- 最新病理生理学试题及答案全