MongoDB中的基础概念:Databases、Collections、Documents
MongoDB以BSON格式的文档(Documents)形式存储。Databases中包含集合(Collections),集合(Collections)中存储文档(Documents)。
BSON是一个二进制形式的JSON文档,它比JSON包含更多的数据类型。对于BSON规格,可参见bsonspec.org,也可参考BSON类型。
Databases
在MongoDB中,databases保存文档(Documents)的集合(Collections)。
在Mongo Shell中,通过使用use <db>
命令来选中database,就像下面的例子:
use myDB |
创建Database
如果database不存在,MongoDB会在第一次为database存储数据的时候创建。因此,你可以直接切换到一个不存在的数据库,然后执行下面的语句:
use myNewDB db.myNewCollection1.insert( { x: 1 } ) |
insert()
操作会创建名为myNewDB的database和名为myNewCollection1的collection(如果他们不存在的话)。
Collections
MongoDB在collections中存储文档(documents)。Collections类似于关系型数据库中的表(tables)。
创建Collection
如果collection不存在,MongoDB会在第一次为collection存储数据的时候创建。
db.myNewCollection2.insert( { x: 1 } ) |
无论是insert()还是createIndex()操作,都会创建它们各自指定的收集,如果他们不存在的话。
显式创建
MongoDB提供db.createCollection()方法来显式创建一个collection,同时还能设置各种选项,例如:设置最大尺寸和文档校验规则。如果你没有指定这些选项,那么你就不需要显式创建collection,因为MongoDB会在你创建第一个数据的时候自动创建collection。
若要修改这些collection选择,可查看collMod。
Documents校验
3.2.x版本新增内容。
默认情况下,collection不要求文档有相同的结构;例如,在一个collection的文档不必具有相同的fields,对于单个field在一个collection中的不同文档中可以是不同的数据类型。
从MongoDB 3.2开始,你可以在对collection进行update和insert操作的时候执行文档(documents)校验规则。具体可参见文档验证的详细信息。
Documents
Document结构
MongoDB的文件是由field和value对的结构组成,例如下面这样的结构:
{ |
value值可以是任何BSON数据类型,包括:其他document,数字,和document数组。
例如下面的document,包含各种不同类型的值:
var mydoc = { |
上面例子中的各fields有下列数据类型:
- _id:ObjectId类型
- name:一个嵌入的document,包含first和last字段
- birth和death:Date类型
- contribs:字符串数组
- views:NumberLong类型
Field名
Field名是一个字符串。
Documents中的filed名有下列限制:
- _id被保留用于主键;其值必须是集合中唯一的、不可变的、并且可以是数组以外的任何数据类型
- 不能以美元符号
$
开头 - 不能包含点字符
.
- 不能包含空字符
Field Value限制
对于索引的collections,索引字段中的值有最大长度限制。详情请参见Maximum Index Key Length。
圆点符号
MongoDB中使用圆点符号.
访问数组中的元素,也可以访问嵌入式Documents的fields。
Arrays数组
通过圆点符号.
来链接Arrays数组名字和从0开始的数字位置,来定位和访问一个元素数组:
"<array>.<index>" |
举例:对于下面的document:
{ |
要访问contribs数组中的第三个元素,可以这样访问:
"contribs.2" |
嵌入式Documents
通过圆点符号.
来链接嵌入式document的名字和field名,来定位和访问嵌入式document:
"<embedded document>.<field>" |
举例:对于下面的document:
{ |
要访问name中的last字段,可以这样使用:
"name.last" |
Documents限制
Documents有下面这些属性和限制:
Document大小限制
每个BSON文档的最大尺寸为16兆字节。
最大文档大小有助于确保一个单个文档不会使用过量的内存,或通信过程中过大的带宽占用。
若要存储超过最大尺寸的文档,MongoDB提供了GridFS API。可以看mongofiles和更多有关GridFS的文档
Document Field顺序
MongoDB中field的顺序默认是按照写操作的顺序来保存的,除了下面几种情况:
- _id总是document的第一个field
- 可能会导致文档中的字段的重新排序的更新,包括字段名重命名。
在2.6版本起,MongoDB开始积极地尝试保留document中field的顺序。
_id字段
_id字段有以下行为和限制:
- 默认情况下,MongoDB会在创建collection时创建一个_id字段的唯一索引
- _id字段总是documents中的第一个字段。如果服务器接收到一个docuement,它的第一个字段不是_id,那么服务器会将_id字段移在开头
- _id字段可以是除了array数组之外的任何BSON数据格式
以下是存储_id值的常用选项:
- 使用ObjectId
- 最好使用自然的唯一标识符,可以节省空间并避免额外的索引
- 生成一个自动递增的数字。请参阅创建一个自动递增序列字段
- 在您的应用程序代码中生成UUID。为了更高效的在collection和_id索引中存储UUID值,可以用BSON的BinData类型存储UUID。
大部分MongoDB驱动客户端会包含_id字段,并且在发送insert操作的时候生成一个ObjectId。但是如果客户端发送一个不带_id字段的document,mongod会添加_id字段并产生一个ObjectId
MongoDB中的基础概念:Databases、Collections、Documents的更多相关文章
- MongoDB学习笔记-基础概念
mongodb中基本的概念 文档.集合.数据库 与关系数据库的概念对比更容易理解
- MongoDB之源生基础概念与语句测试
此文章,我们拿MySQL和MongoDB做一个简单的理解. MySQL的数据库 => MongoDB数据库 MySQL的表 => MongoDB的Collection MySQL的一行记录 ...
- 【2016-10-31】【坚持学习】【Day16】【MongoDB】【入门 -概念】
MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术 ...
- JavaScript随笔记(一)基础概念以及变量类型
一.JavaScript中的基础概念 1.defer属性 一般我们在引用外部js文件的时候往往是将引用文件的位置放在标签当中,比如那么在标签中引入多个js文件时,浏览器会按照引入顺序加载执行这些引入的 ...
- RabbitMQ 入门之基础概念
什么是消息队列(MQ) 消息是在不同应用间传递的数据.这里的消息可以非常简单,比如只包含字符串,也可以非常复杂,包含多个嵌套的对象.消息队列(Message Queue)简单来说就是一种应用程序间的通 ...
- (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇
本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...
- PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念
PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念 据我个人所知,windows下的cmd shell除了能够通过修改系统参数来对其中的环境变量 ...
- MongoDB入门系列(一):基础概念和安装
概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Versi ...
- MongoDB的基础概念
1.MongoDB和传统数据库的概念区别 database database 数据库table collection 数据库表/集合row ...
随机推荐
- 使用rand替换random模块
random模块使用相同的种子,在不同的进程中会出现相同的结果. rand的模块使用不同的种子,在不同的进程中不会出现相同的结果. 2个模块都是erlang自带的. 然后erlang在文档里面注明推荐 ...
- .NET中的堆(Heap)和栈(Stack)的本质
计算机的内存可以分为代码块内存,Stack内存和Heap内存.代码块内存是在加载程序时存放程序机器代码的地方. 栈(Stack)一般存放函数内的局部变量. 堆(Heap)一般存放全局变量和类对象实例等 ...
- MySQL 日志功能详解
MySQL日志分类 1:查询日志 :query log 2:慢查询日志:slow_query_log 查询执行时长超过指定时长的查询操作所记录日志 3:错误日志:error log ...
- webgl glsl
GLSL是什么? GLSL是运行在GPU上的着色器语言 GLSL有自己的语法,跟js有些不同. GLSL是一个强类型的语言,所以在写着器语言时,必须要用强类型,强类型,强类型,强类型 GLSL是着色器 ...
- PHP中面向对象编程思想的3个特征
面向对象编程思想的3个特征: 封装: 无非是一个大的指向思想,目的是为了将一个类设计得更为健壮! 其基本做法是: 尽可能地将一个类的成员私有化,只开放那些必不可少的对外的属性或方法,能private的 ...
- PHP中继承
继承 基本概念 将一个类A中的特性信息,传递到另一个类B中,此时就称为: B继承A A派生出B: 基本语法: 几个基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生 ...
- 【C++】指针和引用
引用: 引用(reference)是为对象起了另外一个名字,引用类型应用(refers to)另外一种类型.通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名. 一般初始化变量时, ...
- 一张图看懂css的position里的relative和absolute的区别
position有以下属性:static.inherit.fixed.absolute.relative前三个好理解好区分:static:是默认状态,没有定位,元素出现在正常的流中(忽略 top, b ...
- 第164天:js方法调用的四种模式
js方法调用的四种模式 1.方法调用模式 function Persion() { var name1 = "itcast", age1 = 19, show1 = functio ...
- 第107天:Ajax 实现简单的登录效果
使用 Ajax 实现简单的登录效果 Ajax是一项使局部网页请求服务器信息,而不需整体刷新网页内容的异步更新技术.这使得向服务器请求的数据量大大减少,而且不会因局部的请求失败而影响到整体网页的加载. ...