MongoDB基础教程系列--第一篇 进入MongoDB世界
1、什么是MongoDB
MongoDB是跨平台的、一个基于分布式文件存储的数据库。由C++语言编写。用它创建的数据库具备性能高、可用性强、易于扩展等特点。MongoDB将数据存储为一个文档,数据结构由键值(key:value)对组成。MongoDB文档类似于 JSON 对象。字段值可以包含字符串、数字、数组、当然也可以是另一个文档。文档是可以嵌套的。
2、概念
在MongoDB中基本的概念是文档、集合、数据库,下表可以帮助更容易的理解MongoDB的概念:
关系型数据库 | MongoDB |
---|---|
数据库 | 数据库 |
表 | 集合 |
行 | 文档 |
列 | 字段 |
表 Join | 内嵌文档 |
主键 | 主键,MongoDB自动将_id字段设置为主键 |
2.1、文档
文档相当于关系型数据库中的行。它一组键值对,具有动态的模式,所以文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这一点,跟关系型数据库有很大的不同。
注:
- 文档中的键/值对是有序的。
- MongoDB区分类型和大小写。
- MongoDB的文档不能有重复的键。
- 键不能含有\0 (空字符)。
- .和$有特别的意义,只有在特定环境下才能使用。
2.2、集合
集合相当于关系型数据库中的表。集合就是一组MongoDB文档。集合存在于数据库中,集合没有固定的结构,这意味着可以对集合插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
注:
- 集合名不能是空字符串""。
- 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
- 集合名不能以"system."开头,这是为系统集合保留的前缀。
- 集合名用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
2.3、数据库
数据库是集合的实际容器。每一数据库都在文件系统中有自己的一组文件。一个 MongoDB 服务器通常有多个数据库。
注:
- 不能是空字符串("")。
- 不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
- 应全部小写。
- 最多64字节。
2.4、范例
下面这个范例展示了一个人的关系网的文档结构,它是由逗号分隔的键值对构成的
{
_id: ObjectId(7df78ad8902c)
name: 'Liruihuan',
age: 18,
blogs: 'http://www.cnblogs.com/liruihuan/',
friends: [
{
name:'user1',
age: 18,
friends: [...]
},
{
name:'user2',
age: 18,
friends: [...]
}
]
}
注:_id 是一个 12 字节长的十六进制数,它保证了每一个文档的唯一性。在插入文档时,需要提供 _id
。如果你不提供,那么 MongoDB 就会为每一文档提供一个唯一的 id。_id
的头 4 个字节代表的是当前的时间戳,接着的后 3 个字节表示的是机器 id 号,接着的 2 个字节表示 MongoDB 服务器进程 id,最后的 3 个字节代表递增值。
3、使用MongoDB的优势
- 模式较少:MongoDB 是一种文档数据库,一个集合可以包含各种不同的文档。每个文档的字段数、内容以及文档大小都可以各不相同。
- 采用单个对象的模式,清晰简洁。
- 没有复杂的连接功能。
- 深度查询功能。MongoDB 支持对文档执行动态查询,使用的是一种不逊色于 SQL 语言的基于文档的查询语言。
- 具有调优功能。
- 易于扩展。MongoDB 非常易于扩展。
- 不需要从应用对象到数据库对象的转换/映射。
- 使用内部存储存储(窗口化)工作集,能够更快地访问数据。
4、适用场景
- 大数据
- 内容管理及交付
- 移动及社会化基础设施
- 用户数据管理
- 数据中心
5、应用案例
- Craiglist上使用MongoDB的存档数十亿条记录。
- 纽约时报,领先的在线新闻门户网站之一,使用MongoDB。
- CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB。
- FourSquare,基于位置的社交网站,在Amazon EC2的服务器上使用MongoDB分享数据。
业精于勤,荒于嬉;行成于思,毁于随。
如果你觉得这篇文章不错或者对你有所帮助,可以通过右侧【打赏】功能,给予博主一点点鼓励和支持
MongoDB基础教程系列--第一篇 进入MongoDB世界的更多相关文章
- MongoDB基础教程系列--第二篇 MongoDB基本操作(一)
1.安装环境 在官网上下载MongoDB的最新版本,根据自身Windows版本下载正确的MongoDB版本.下载后,双击32位或者64位.msi文件,按操作提示安装就可以了. 说明: 32 位版本的 ...
- MongoDB基础教程系列--第九篇 MongoDB 分片
1.分片介绍 分片(sharding)是将数据拆分,将其分散存到不同机器上的过程.MongoDB 支持自动分片,可以使数据库架构对应用程序不可见.对于应用程序来说,好像始终在使用一个单机的 Mongo ...
- MongoDB基础教程系列--未完待续
最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...
- MongoDB基础教程系列--目录结构
最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...
- [Odoo12基础教程]之第一篇-创建Todo应用
声明: 本教程基于 Ruter 老师的 [Odoo基础教程系列] ,Ruter老师教程的链接地址为:Odoo基础教程系列 . 至于为什么已经有了Ruter老师的教程,还要自己再搬移一份呢?是基于一 ...
- MongoDB基础教程系列--第七篇 MongoDB 聚合管道
在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最 ...
- MongoDB基础教程系列--第三篇 MongoDB基本操作(二)
1.集合操作 1.1.创建集合 MongoDB 用 db.createCollection(name, options) 方法创建集合. 格式 db.createCollection(name, op ...
- MongoDB基础教程系列--第四篇 MongoDB 查询文档
查询文档 查询文档可以用 find() 方法查询全部文档,可以用 findOne() 查询第一个文档,当然还可以根据 条件操作符 和 $type操作符 查询满足条件的文档. find() 和 find ...
- MongoDB基础教程系列--第五篇 MongoDB 映射与限制记录
上一篇提到的 find() 的方法,细心的伙伴会发现查询的结果都是显示了集合中全部的字段,实际应用中,显然是不够用的.那么有没有办法指定特定的字段显示出文档呢?答案是肯定的,MongoDB 中用映射实 ...
随机推荐
- Android之RecyclerView轻松实现下拉刷新和加载更多
今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的APP显示数据列表时都用到了.自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难, ...
- c#算两个火星坐标的距离(高德or百度)
/// <summary> /// 获取两个坐标之间的距离 /// </summary> /// <param name="lat1">第一个坐 ...
- devexpress表格gridcontrol实现列统计,总计,平均,求和等。
1.在许多项目中,经常要实现对某些列的统计.devexpress控件gridcontrol实现这些功能只需要设置某些属性,就可以达到要求了.以下例举了一个统计班级总数,人数总计,分数总计的案例.效果图 ...
- C++_运算符重载
什么是运算符的重载? 运算符与类结合,产生新的含义. 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义) 怎么实现运算符的重载? 方式:类的成员函数 或 友元函数(类外 ...
- [UWP]涨姿势UWP源码——UI布局
懒癌晚期兼正月里都是过年,一直拖到今天才继续更新.之前的几篇介绍了数据的来源,属于准备工作.本篇我们正式开始构建涨姿势UWP程序的UI界面. 我们这个Hello World程序比较简单,总共只有一个页 ...
- [看图说话] 基于Spark UI性能优化与调试——初级篇
Spark有几种部署的模式,单机版.集群版等等,平时单机版在数据量不大的时候可以跟传统的java程序一样进行断电调试.但是在集群上调试就比较麻烦了...远程断点不太方便,只能通过Log的形式,进行分析 ...
- MySQL主从复制与主主复制
1.简介 MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一.但不可忽略的是它本身的功能的确很强大.随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时 ...
- 性能测试工具 - Apache JMeter (安装)
简介 Apache JMeter 是100%纯java语言开发的负载测试和性能测试开源工具. 功能 Apache JMeter可以对静态/动态资源进行性能测试,模拟多个用户并行请求资源端,以测试其强度 ...
- 【SysML】用例图
引言 对于系统工程师来说,设计用例图是一种极为常见的建模活动.用例图是一种黑盒视图,通过向读者传递一系列的用例以及相关的参与者,对系统对外提供的服务或系统具备的行为进行建模.在详细讨论SysML的用例 ...
- Phpcms 详情页显示所属栏目的同级栏目
Phpcms详情页是不显示所属栏目的同级栏目的,如果按下面的方式 {loop subcat($parentid) $v} <li{if $v[catid]==$catid} class=&quo ...