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 文档相关的更多相关文章

  1. MongoDB学习笔记——文档操作之增删改

    插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...

  2. SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  3. xml和xsd架构文档相关知识

    1.使用架构(XSD)验证XML文件 2.使用自动生成工具: 工具目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4. ...

  4. Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***.

    Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***. Mongodb是一种面向文档的 ...

  5. Linux中几个与文档相关的命令

    一.介绍 本文将介绍几个与文档相关的命令 软件环境: 物理机 Windows 8.0 虚拟机 VMware Workstation 12 Linux系统 CentOS 7.3 二.命令cat 命令ca ...

  6. Elasticsearch操作Document文档

    1.利用客户端操作Document文档数据        1.1 创建一个文档(创建数据的过程,向表中去添加数据)            请求方式:Post    请求地址:es所在IP:9200/索 ...

  7. 操作Document文档

    利用客户端操作Document文档数据 1.创建一个文档(创建数据的过程,向表中去添加数据) 请求方式:Post 请求地址:es所在IP:9200/索引库/Type/文档ID(可给可不给,代表唯一标识 ...

  8. mongodb官网文档阅读笔记:与写性能相关的几个因素

    Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...

  9. 【MongoDB学习之二】MongoDB数据库、文档、集合、元数据

    环境 MongoDB 4.0 CentOS6.5_x64 一.连接语法格式: mongodb://[username:password@]host1[:port1][,host2[:port2],.. ...

随机推荐

  1. Java多线程编程(同步、死锁、生产消费者问题)

    Java多线程编程(同步.死锁.生产消费): 关于线程同步以及死锁问题: 线程同步概念:是指若干个线程对象并行进行资源的访问时实现的资源处理保护操作: 线程死锁概念:是指两个线程都在等待对方先完成,造 ...

  2. Python的文本和字节序列

    一.字符串的表示和存储 字符串是字符的序列,每个字符都有有一个数字作为标识,同时会有一个将标识转换为存储字节的编码方案: s = 'hello world python' for c in s: pr ...

  3. 算法、数据结构、与设计模式等在游戏开发中的运用 (一):单例设计(Singleton Design)

    算法.数据结构.与设计模式等在游戏开发中的运用 (一):单例设计(Singleton Design) 作者: Compasslg 李涵威 1. 什么是单例设计(Singleton Design) 在学 ...

  4. IDEA常用个性化设置

    自己对于IDEA一些个性化设置,这里简单记录一下,省的之后四处百度 常用插件安装 CodeGlance:代码编写区域右侧小地图 GenerateAllSetter:针对new出来的实体类对象快速调用G ...

  5. Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说

    注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...

  6. odoo字段属性列举

    罗列一些Odoo中的字段属性,基本包含大部分的属性. 常用字段属性 平平无奇常用字段属性 string:字段的标题,在UI视图标签中使用.它是可选项,如未设置,会通过首字母大写及将空格替换成为下划线来 ...

  7. 11- APP性能测试GT工具的使用

    对性能测试来说有服务端的性能与客户端(APP)的性能. GT简介 1.GT(随身调)是APP的随身调测平台,它是直接运行在手机上的"集成调试环境"(IDTE) 2.利用GT,仅凭一 ...

  8. 【ShardingSphere】ShardingSphere学习(二)-核心概念-SQL

    逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称. 例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order. 真实表 在分片的数 ...

  9. 洛谷P1085 不高兴的津津

    题目描述 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞蹈和钢琴.但是津津如果一天上课超过八个小时就会不高兴,而 ...

  10. Tomcat容器、JSP和Servlet

    目录 JSP Tomcat.JSP和Servlet JSP JSP全名为Java Server Pages,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的HTML网页 ...