[mongo] 1.3 Documents(文档)
MongoDB将数据记录存储为BSON文档。BSON是JSON文档的二进制表示形式,比JSON包含更多的数据类型。有关BSON规范,请参见bsonspec.org。另请参阅BSON类型。
文档结构
MongoDB文档由字段和值对( field-and-value)组成,并具有以下结构:
字段的值可以是任何BSON数据类型,包括其他文档,数组和文档数组。例如,以下文档包含各种类型的值:
上面的字段具有以下数据类型:
- _id拥有一个ObjectId。
- name包含一个包含first和last字段 的嵌入式文档。
- birth并death保留Date类型的值。
- contribs持有字符串数组。
- views拥有NumberLong类型的值。
Field名称
Field名称是字符串。
文档对字段名称有以下限制:
- 字段名称_id保留用作主键;它的值在集合中必须是唯一的,不可变的,并且可以是数组以外的任何类型。
-
字段名称不能包含null字符。
-
顶级字段名称不能以美元符号($)字符开头。
否则,从MongoDB 3.6开始,服务器允许存储包含点(即.)和美元符号(即 $)的字段名称。
重要
MongoDB查询语言不能总是有效地表达对字段名称包含这些字符的文档的查询(请参阅SERVER-30575)。
尽管支持在查询语句中添加$和 .,MongoDB的官方驱动程序不推荐也不支持在字段名称使用$和 .。
BSON文档可能有多个具有相同名称的字段。但是,大多数MongoDB接口使用不支持重复字段名称的结构(例如,哈希表)来表示MongoDB。如果需要处理具有多个同名字段的文档,请参见驱动程序的驱动程序文档。
通过内部的MongoDB进程创建的有些文件可能有重复的字段,但是没有MongoDB进程会不断地添加重复字段到现有的用户文档。
字段值限制
-
MongoDB 2.6至MongoDB版本,并将featureCompatibilityVersion(fCV)设置为"4.0"
或更早版本
-
对于索引集合,索引字段的值有一个。有关详细信息,请参见 。Maximum Index Key LengthMaximum Index Key Length
点 符号
MongoDB使用点符号访问访问数组的元素,访问嵌入式文档的字段。
数组(arrays)
要通过从零开始的索引位置指定或访问数组的元素,请将数组名称与点(.
)和从零开始的索引位置连接起来,并用引号引起来:
例如,给定文档中的以下字段:
要指定contribs数组中的第三个元素,请使用点符号"contribs.2"。
有关查询数组的示例,请参见:
文件限制
文档具有以下属性:
文件大小限制
BSON文档的最大大小为16 MB。
最大文档大小有助于确保单个文档不会使用过多的RAM或在传输过程中占用过多的带宽。要存储大于最大大小的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参见mongofiles和驱动程序的文档。
_id段
在MongoDB中,存储在集合中的每个文档都需要一个唯一的 _id字段作为主键。如果插入的文档省略了该_id
字段,则MongoDB会自动为该字段生成一个ObjectId_id。
这也适用于通过upsert:true通过更新操作插入的文档。
_id字段具有以下特性和约束:
-
默认情况,MongoDB_id在创建集合期间会在字段上创建唯一索引。
-
_id字段始终是文档中的第一个字段。如果服务器首先接收到没有该_id字段的文档,则服务器会将字段移到开头。
-
_id字段可以包含除数组以外的任何BSON数据类型的值。
警告
为确保复制正常进行,务必在_id 字段中存储BSON正则表达式类型的值。
以下是用于存储的值的常用选项_id:
-
使用一个ObjectId。
-
使用自然的唯一标识符(如果有)。这样可以节省空间并避免附加索引。
-
生成一个自动递增的数字。
-
在您的应用程序代码中生成一个UUID。为了在集合和_id 索引中更有效地存储UUID值,请将UUID存储为BSONBinData类型的值。
在以下情况下,BinData更有效地将类型为索引的键存储在索引中:
- 二进制子类型的值在0-7或128-135的范围内,并且
- 字节数组的长度为:0、1、2、3、4、5、6、7、8、10、12、14、16、20、24或32。
-
使用驱动程序的BSON UUID工具生成UUID。请注意,驱动程序实现可能会以不同的方式实现UUID序列化和反序列化逻辑,这可能与其他驱动程序不完全兼容。请参阅您的驱动程序文档,以获取有关UUID互操作性的信息。
注意
大多数MongoDB驱动程序客户端将包括该_id字段并ObjectId在将插入操作发送到MongoDB之前生成一个;但是,如果客户发送的文档中没有_id 字段,mongod则会添加该_id字段并生成ObjectId。
数据结构的其他用途
除了定义数据记录外,MongoDB还在整个文档结构中使用,包括但不限于:查询过滤器,更新规范文档和索引规范文档
索引规范文档
索引规范文档定义了要索引的字段和索引类型:
Further Reading
For more information on the MongoDB document model, download the MongoDB Application Modernization Guide.
The download includes the following resources:
- Presentation on the methodology of data modeling with MongoDB
- White paper covering best practices and considerations for migrating to MongoDB from an RDBMS data model
- Reference MongoDB schema with its RDBMS equivalent
- Application Modernization scorecard
- 点赞
- 收藏
- 关注作者
评论(0)