文档章节

【MongoDB系列】:MongoDB基础知识

hanfeng
 hanfeng
发布于 2015/12/03 10:55
字数 1199
阅读 47
收藏 3

基础概念

  • 文档是MongoDB中数据的基本单元,类型关系型数据库的行。

  • 集合可以看作是拥有动态模式的表。

  • MongoDB是一个实例可以拥有多个相互独立的数据库,每个数据库都有自己的集合。

  • 每个文档都有一个特殊的键“_id”,该键在文档所属得集合中是唯一的。

  • 带有JavaScript Shell,用来管理MongoDB得实例和数据操作。

一、文档

文档就是键值对得一个有序集。如:{"title" : "Hello MongoDB"}

文档的键是字符串,除极少数例外,键可以使用任意的UTF-8字符。

    • 不能含有\0(空字符串)。

    • 不能使用.和$ 符号。这2个符号具有特殊意义,只能在特定环境使用。

MongoDB区分类型且区分大小写。如:{"age" : "20"}和{"age" : 20} 不同  {"age" : 20}和{"Age" : 20}也不同

文档不能包含重复的键,不然就是非法的。

二、集合

集合就是一组文档。

集合是动态模式,说明一个集合里面文档可以是各种各样得。


多个集合原因:

1、文档不区分放在同一个集合里,对于开发和管理都是噩梦,数据混乱,查询麻烦。

2、在一个集合里面查询特定类型的文档速度不快,分开更快捷。

3、同种类型文档集合放在一个集合,方便快捷。

4、创建索引时,需要使用文档的附加结构。索引是按照集合来定义,一个集合只放入一种类型的文档,可以更有效对集合进行索引。


命名方式:

  • 集合使用名称进行标识。

  • 集合名不能是空字符串("")。

  • 集合名不能包含\0字符(空字符)。

  • 集合名不能以“system.”开头,这是系统集合保留的前缀。

  • 用户创建的集合不能在集合中包含保留字符“$”。

三、数据库

多个文档组成集合,多个集合组成数据库。一个MongoDB实例可以承载多个数据库,每个数据库拥有0或者多个集合。每个数据库都有独立权限,key放置在不同的文件中。

命名规则:

    • 不能是空字符串("")。

    • 最好使用ASCII中的字母和数字

    • 区分大小写,为了简单和方便,数据库名全部小写

    • 数据库名最多为64字节


【admin】,这是root数据库。

【local】,不可复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。

【config】,分片设置时,分片信息回存储在config数据库中。

四、数据类型

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

  • 布尔型: true和false  如:{"isNum" : true}

  • 数值:shell默认使用64位浮点型数值。{"total" : 3} 或者 {"total" : 3.14}

     对于整型值 {"x" : NumberInt("3")}   \ {"x" : NumberLong("3")}

  • 字符串:UTF-8字符串都可以表示为字符串类型的数据

  • 日期:存储自新纪元以来经过的毫秒数,不存储时区。 new Date()

  • 正则表达式:使用正在表达式作为限定条件,语法和js相同

  • 数组: 数组列表或数据集可以表示为数组

  • 内嵌文档:可嵌套其他文档,被嵌套得文档作为父文档的值。

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

  • 二进制数据:任意字节的字符串

  • 代码:查询和文档中可以包括任意js代码

五、_id和ObjectId

MongoDB中存储的文档必须有一个“_id”键。这个键的值可以是任何类型,默认是个ObjectId对象。在一个集合中,每个文档都有唯一的“_id”,确保集合中的每个文档都能被唯一标识。

ObjectId是“_id”默认类型。不同的机器都能用全局唯一的同种方法方便生成。

ObjectId使用12字节的存储空间,是一个由24个十六进制数字组成的字符串。

ObjectId前面4个字节是从新纪元开始的时间戳,单位是秒。

接着3字节是所在主机的唯一标识符,通常是机器主机名得散列值(hash),这样可以确保不同主机生成不同的ObjectId,不会冲突。

为了确保同一台机器上并发的多个进程产生的ObjectId是唯一,接着2个字节来自产生ObjectId得进程的进程标识符(PID)。

最后3个只自动增加的计数器,确保相同进程同1秒产生的ObjectId不一样。

如果在插入文档时候没有“_id”键,系统会自动帮你创一个。



© 著作权归作者所有

hanfeng
粉丝 21
博文 48
码字总数 36874
作品 0
福州
高级程序员
私信 提问
MongoDB系列教程(八):GridFS存储详解

MongoDB系列教程(八):GridFS存储详解 GridFS简介 mongoDB的文档以BSON格式存储,支持二进制的数据类型,当我们把二进制格式的数据直接保存到mongoDB的文档中。但是当文件太大时,例如图片...

开元中国2015
2015/07/25
0
0
《阿里巴巴MongoDB4.0高级实战:基于Java Spring Boot 2.0》运维、监控、聚合、集群、监控等高级面试题

《阿里巴巴MongoDB4.0高级实战》阿里巴巴技术大牛 资深专家P9叶翔、专家徐雷. NoSQL排名第一!最流行的NoSQL数据库;谷歌、阿里巴巴、蚂蚁金服、腾讯、百度等一线互联网公司必备技能。 本系列...

徐雷frank
2018/11/01
0
0
2017 MongoDB中国用户大会

September 09, 2017 2017年9月9号 上海龙之梦万丽酒店 Renaissance Shanghai Zhongshan Park Hotel 请和我们一起参加MongoDB中国2017大会 MongoDB中国大会将帮助您获得MongoDB的新知识和技能...

Rachelli123
2017/08/09
0
0
JS服务端系列-nodejs+express+ejs+mongodb的数据显示

1.我们下载好mongodb数据库,这个程序我放在nodejs的目录下了, 我的nodejs是安装在d: nodejs目录下,看图可以看到我的存放位置,这个随便放置 2.打开cmd窗口,转到mongodb的bin目录下, 执行...

透笔度
2015/08/05
0
0
2018年MongoDB中文社区西安大会

MongoDB中文社区联合上海锦木信息技术有限公司共同主办的2018活动系列在西安正式开始第一站!这次的活动的亮点多多: - 第一次在西安举办MongoDB活动 - 第一次以行业为主题,东航带头,春秋和...

MongoDB中文社区
2018/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

GMTC2019|闲鱼-基于Flutter的架构演进与创新

作者:闲鱼技术-宗心 2012年应届毕业加入阿里巴巴,主导了闲鱼基于Flutter的新混合架构,同时推进了Flutter在闲鱼各业务线的落地。未来将持续关注终端技术的演变及趋势 Flutter的优势与挑战 ...

阿里云云栖社区
16分钟前
2
0
迪蒙人工智能共享停车吸引国际关注

  近来,华为创始人任正非多次提及人工智能。即便在华为生死攸关的关键时刻,任正非依旧不忘强调教育的重要性,“如果不重视教育,实际上我们会重返贫穷的,因为这个社会,最终是要走向人工智能的...

琴殇的
17分钟前
0
0
iOS开发之EventKitUI框架的应用

iOS开发之EventKitUI框架的应用 前面博客,有介绍EventKit这个框架的使用,使用EventKit可以与系统的日历和提醒应用进行交互,读写用户的日程事件。EventKitUI,顾名思义,其实基于EventKit框...

珲少
25分钟前
0
0
从MySQL源码看其网络IO模型

从MySQL源码看其网络IO模型 前言 MySQL是当今最流行的开源数据库,阅读其源码是一件大有裨益的事情(虽然其代码感觉比较凌乱)。而笔者阅读一个Server源码的习惯就是先从其网络IO模型看起。于是...

无毁的湖光-Al
26分钟前
0
0
WebService学习笔记

什么是Web Services? Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-contained)并可自我描述 Web Services 可通过使用UDDI来发现 Web Serv...

榴莲黑芝麻糊
42分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部