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 } )
db.myNewCollection3.createIndex( { y: 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对的结构组成,例如下面这样的结构:

{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

value值可以是任何BSON数据类型,包括:其他document,数字,和document数组。

例如下面的document,包含各种不同类型的值:

var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: {
first: "Alan", last: "Turing"
},
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}

上面例子中的各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: [ "Turing machine", "Turing test", "Turingery" ],
...
}

要访问contribs数组中的第三个元素,可以这样访问:

"contribs.2"
嵌入式Documents

通过圆点符号.来链接嵌入式document的名字和field名,来定位和访问嵌入式document:

"<embedded document>.<field>"

举例:对于下面的document:

{
...
name: { first: "Alan", last: "Turing" },
...
}

要访问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的更多相关文章

  1. MongoDB学习笔记-基础概念

    mongodb中基本的概念 文档.集合.数据库 与关系数据库的概念对比更容易理解

  2. MongoDB之源生基础概念与语句测试

    此文章,我们拿MySQL和MongoDB做一个简单的理解. MySQL的数据库 => MongoDB数据库 MySQL的表 => MongoDB的Collection MySQL的一行记录 ...

  3. 【2016-10-31】【坚持学习】【Day16】【MongoDB】【入门 -概念】

    MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术 ...

  4. JavaScript随笔记(一)基础概念以及变量类型

    一.JavaScript中的基础概念 1.defer属性 一般我们在引用外部js文件的时候往往是将引用文件的位置放在标签当中,比如那么在标签中引入多个js文件时,浏览器会按照引入顺序加载执行这些引入的 ...

  5. RabbitMQ 入门之基础概念

    什么是消息队列(MQ) 消息是在不同应用间传递的数据.这里的消息可以非常简单,比如只包含字符串,也可以非常复杂,包含多个嵌套的对象.消息队列(Message Queue)简单来说就是一种应用程序间的通 ...

  6. (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇

    本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...

  7. PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念

    PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念 据我个人所知,windows下的cmd shell除了能够通过修改系统参数来对其中的环境变量 ...

  8. MongoDB入门系列(一):基础概念和安装

    概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Versi ...

  9. MongoDB的基础概念

    1.MongoDB和传统数据库的概念区别 database       database        数据库table           collection    数据库表/集合row      ...

随机推荐

  1. springMVC 流程

    springMVC流程控制 SpringMVC流程 web.xml 中配置 org.springframework.web.servlet.DispatcherServlet 这一步其实和spring ...

  2. linux桌面使用鼠标中间健粘帖

    使用linux桌面很久了,一直习惯鼠标左键选中,右健弹出菜单复制粘帖. 没想到linux使用鼠标中间健粘帖,很方便. 参考:Linux鼠标中键复制粘贴之谜[Felix蛋疼科普贴] 用鼠标左键单击待复制 ...

  3. js登录界面代码自用

    var btn = document.getElementById("a4"); var usne = document.getElementById("username ...

  4. 2nd 简单四则运算更新

    简单四则运算更新 功能:由随机数决定出题为10个以内的数字,并确定是否出现括号(仅限一对),顺序输出表达式,并用栈的方式进行计算,判断正误.其他功能有待进一步实现. 头文件 #include < ...

  5. inno setup 打包exe程序

    inno setup 用于打包生成安装程序, 是通过的一个脚本 可以将 exe 执行文件以安装的形式,解压,添加依赖,创建快捷方式. 例如,我们写了个winform,我们怎么通过安装的形式,给客户的机 ...

  6. 插件-3D轮播图

    先上效果图 查看实例点击 这里  这个栗子中,可以选择展示 5 张 或者展示 3 张,即使是只有一个slide,也可以完成布局,正常轮播,麻麻再也不用怕只有4个slid而不能用这种轮播啦! 本栗实现原 ...

  7. BZOJ3747 POI2015Kinoman(线段树)

    考虑固定左端点,求出该情况下能获得的最大值.于是每次可以在某数第一次出现的位置加上其价值,第二次出现的位置减掉其价值,查询前缀最大值就可以了.每次移动左端点在线段树上更新即可. #include< ...

  8. 洛谷 P1401 城市(二分+网络流)

    题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...

  9. jsp - redirect重定向 / forward转发

    redirect:请求重定向: 客户端行为,本质上为2次请求,地址栏改变,前一次请求对象不保存, 所以请求携带的数据会丢失. 举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先 ...

  10. struts2(s2-052)远程命令执行漏洞复现

    漏洞描述: 2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为C ...