MongoDB(5)- Document 文档相关

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB(5)- Document 文档相关

Documents


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


image.png


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 开始,允许存储包含 .$ 符号的字段

 

字段的一些限制

  • 键名区分大小写;
  • 键的值区分类型(如字符串和整数等)

 

栗子一

以下两组文档是不同的,因为值的类型不同

{"recommend":"5"}

{"recommend":5}

 

栗子二

以下两组文档也是不同的,因为键名是区分大小写的

{ "Recommend" : " 5 "}

{"recommend":"5"}

 

关于一个文档里面的同名字段


  • 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数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
11月前
|
NoSQL MongoDB 数据库
MongoDB 解析:灵活文档数据库与 Docker Compose 部署
`MongoDB` 是一款开源、高性能的 `NoSQL` 数据库,以其无模式的文档存储格式(BSON)而著称,广泛应用于众多开源项目,包括但不限于 Yapi 等。它在大规模数据存储和实时数据处理方面表现出色,因此备受青睐。在本文中,我们将深入探讨 `MongoDB` 的特性,并详细阐述如何使用 Docker Compose 轻松部署 `MongoDB` 数据库,为你提供全方位的指导。
315 1
MongoDB 解析:灵活文档数据库与 Docker Compose 部署
|
1月前
|
存储 NoSQL MongoDB
MongoDB拆分大文档、嵌入文档
【7月更文挑战第6天】
29 0
|
3月前
|
存储 NoSQL 数据管理
【MongoDB 专栏】MongoDB 文档模型详解
【5月更文挑战第10天】MongoDB 是一种流行的 NoSQL 数据库,以其灵活的文档数据模型著称。文章介绍了文档的基本概念、结构及操作,包括插入、查询、更新和删除。文档特点是灵活且可扩展,适合存储不同结构的数据。优势在于简化数据建模、提升开发效率并适应动态数据。应用场景包括用户信息、日志记录和电商数据管理。但需注意数据一致性和文档大小对性能的影响。理解文档模型有助于高效利用 MongoDB。
63 1
【MongoDB 专栏】MongoDB 文档模型详解
|
3月前
|
NoSQL MongoDB 数据库
通过优化索引以消除 MongoDB 中的 "查询目标已超过1000个扫描对象/返回的文档数" 警告
MongoDB NoSQL数据库在处理复杂查询时可能出现“查询目标已超过1000个扫描对象/返回的文档数”警告。文章分析了该问题,展示了一个示例集合和相关索引,并提供了查询示例。通过`explain`命令发现查询未有效利用索引。解决方案是遵循ESR规则,创建新索引从而优化查询并消除警告。
99 1
|
2月前
|
NoSQL BI MongoDB
MongoDB 数据探索之道:查询文档操作详解
MongoDB 数据探索之道:查询文档操作详解
|
2月前
|
NoSQL 安全 MongoDB
MongoDB 数据精简指南:删除文档操作详解
MongoDB 数据精简指南:删除文档操作详解
|
2月前
|
NoSQL MongoDB 数据库
MongoDB 更新文档:灵活修改数据,实时响应需求变化
MongoDB 更新文档:灵活修改数据,实时响应需求变化
|
2月前
|
存储 JSON NoSQL
MongoDB 插入文档:轻松管理数据录入与批量导入
MongoDB 插入文档:轻松管理数据录入与批量导入
|
3月前
|
存储 JSON NoSQL
MongoDB的文档存储格式BSON和JSON的区别
MongoDB的文档存储格式BSON和JSON的区别

热门文章

最新文章