MongoDB(5)- Document 文档相关
Documents
- MongoDB 的文档可以理解为关系型数据库(Mysql)的一行记录
- MongoDB 将数据记录为 BSON 格式的文档
- BSON 是 JSON 文档的二进制表示,但它支持的数据类型更加丰富(下一篇文章讲到)

Documents 的结构
由键值对组队(字段名:值)
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}
字段的值可以是任何 BSON 数据类型,比如:其他文档、数组、文档数组
小栗子
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)
}
上述文档包含了以下数据类型
_id:ObjectId(下一篇介绍)name:文档类型的值,它又包含了 first、last 两个字段值birth、death: Date 类型的值contribs:字符串数组views:NumberLong 类型的值
字段名
首先必须是字符串,除此之外还有以下限制
字段名不能包含 null 字符
字段名为_id
- 保留用作主键
- 它的值在集合中必须是唯一的,是不可变的
- 并且可以是数组以外的任何类型
最高一级的字段名不能包含 $ 字符
不过,从 MongoDB 3.6 开始,允许存储包含 . 和 $ 符号的字段
关于一个文档里面的同名字段
- BSON文档可能有多个同名字段
- 但是大多数 MongoDB 接口用不支持重复字段名的结构(例如哈希表)表示MongoDB
- 如果需要操作具有多个同名字段的文档,需要查看 driver 驱动相关的文档(后续介绍)
- 一些由内部 MongoDB 进程创建的文档可能有重复的字段,但是没有 MongoDB 进程会将重复的字段添加到现有的用户文档中
访问文档
跟访问 python 的字典一样,都是 .
访问文档里面的数组
"<array>.<index>"
数组小栗子
假设有一个文档,想取 contribs 字段的第三个值
{
...
contribs: [ "Turing machine", "Turing test", "Turingery" ],
...
}
正确做法
contribs.2

更多查询数组字段的方法后面展开详解
访问文档里面的嵌套文档
"<embedded document>.<field>"
嵌套文档小栗子
{
...
name: { first: "Alan", last: "Turing" },
contact: { phone: { type: "cell", number: "111-222-3333" } },
...
}
正确做法
name.last
contact.phone.type

更多嵌套查询的方法后面展开详解
字段值的限制
对索引字段的最大长度有限制(后面更新文章再更新这里)
文档的限制
文档大小限制
- 最大 BSON 文档大小为 16 mb
- 最大文档大小有助于确保单个文档不能使用过多的内存,或者在传输过程中不能占用过多带宽
- 为了超过最大大小限制的文档,MongoDB 也提供了 GridFS(后续再讲)
文档字段顺序
默认情况下,MongoDB 在写操作后保留文档字段的顺序,但以下情况除外
- _id 字段永远都是第一个字段
- 重命名字段名的更新可能会导致文档中字段的重新排序
_id 字段
- 在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段作为主键
- 如果新插入的文档没有指定 _id 字段,那么 MongoDB 会自动为它生成一个 ObjectID(上面的截图其实也能看到)
- 第二条同样适用通过 upsert:true 的更新操作(后续再讲)
存储 _id 值的常用选项
- 使用 ObjectId
- 使用自然唯一标识符(如果可用),这样可以节省空间并避免额外的索引
- 生成一个自动递增的数字
- 在应用程序代码中生成 UUID,为了更有效地存储集合和索引中的UUID值,将 UUID 存储为 BSON BinData类型的值
- 如果满足以下条件,则 BinData 类型的索引键将更有效地存储在索引中:
- 二进制子类型值在0-7或128-135之间,并且
- 字节数组的长度为:0、1、2、3、4、5、6、7、8、10、12、14、16、20、24或32。
- 使用驱动程序的BSON UUID工具生成UUID。
MongoDB(5)- Document 文档相关的更多相关文章
- MongoDB学习笔记——文档操作之增删改
插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...
- SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- xml和xsd架构文档相关知识
1.使用架构(XSD)验证XML文件 2.使用自动生成工具: 工具目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4. ...
- Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***.
Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***. Mongodb是一种面向文档的 ...
- Linux中几个与文档相关的命令
一.介绍 本文将介绍几个与文档相关的命令 软件环境: 物理机 Windows 8.0 虚拟机 VMware Workstation 12 Linux系统 CentOS 7.3 二.命令cat 命令ca ...
- Elasticsearch操作Document文档
1.利用客户端操作Document文档数据 1.1 创建一个文档(创建数据的过程,向表中去添加数据) 请求方式:Post 请求地址:es所在IP:9200/索 ...
- 操作Document文档
利用客户端操作Document文档数据 1.创建一个文档(创建数据的过程,向表中去添加数据) 请求方式:Post 请求地址:es所在IP:9200/索引库/Type/文档ID(可给可不给,代表唯一标识 ...
- mongodb官网文档阅读笔记:与写性能相关的几个因素
Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...
- 【MongoDB学习之二】MongoDB数据库、文档、集合、元数据
环境 MongoDB 4.0 CentOS6.5_x64 一.连接语法格式: mongodb://[username:password@]host1[:port1][,host2[:port2],.. ...
随机推荐
- 多图详解 TCP 连接管理,太全了!!!
TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...
- Day09_44_Set集合_SortedSet01
SortedSet集合 java.util.Set<interface> java.util.SortedSet<interface> 无序不可重复,但是存进去的数据可以按照元 ...
- python进阶(17)协程
协程 协程(Coroutine),又称微线程,纤程.(协程是一种用户态的轻量级线程) 作用:在执行 A 函数的时候,可以随时中断,去执行 B 函数,然后中断B函数,继续执行 A 函数 (可以自动切 ...
- 【C++】从零开始,只使用FFmpeg,Win32 API,实现一个播放器(一)
前言 起初只是想做一个直接读取视频文件然后播放字符动画的程序.我的设想很简单,只要有现成的库,帮我把视频文件解析成一帧一帧的原始画面信息,那么我只需要读取里面的每一个像素的RGB数值,计算出亮度,然后 ...
- C++ 2.0新特性
C++ standard之演化 C++ 98(1.0) C++ 03(TR1, technical Report 1) // 一个实验性的版本 C++ 11(2.0) C++ 14 此次记录涵盖了C+ ...
- CentOS7用yum安装软件提示 cannot find a valid baseurl for repobase7x86_64
解决办法[亲测有效] 1.打开 vi /etc/sysconfig/network-scripts/ifcfg-enp4s0(每个机子都可能不一样,但格式会是"ifcfg-e..." ...
- video播放视频以及相关事件
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...
- ASLR 的关闭与开启(适用于 Windows7 及更高版本)
ASLR 是一种针对缓冲区溢出的安全保护技术,通过对堆.栈.共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术 有的时候 ...
- 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里
/* 描述 功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...
- 【phpstorm】Server's certificate is not trusted
问题描述 phpstorm 一直跳出 问题解决 file-->Settings然后搜索Server Certificates,选中框打钩