文档
前言
一、认识
MongoDB
将数据记录存储为 BSON
文档。BSON
是 JSON
文档的二进制表示形式,但它包含的数据类型比 JSON
多。
二、结构
MongoDB
BSON
文档结构如下: 字段值可以是任何一种 BSON
数据类型,包括其他文档、数组和文档数组。例如,以下文档包含不同类型的值:
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}
const 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)
}
2.1 字段
字段名称为字符串, 文档对字段名称有以下限制:
-
字段名称
_id
保留用作主键;它的值在集合中必须是唯一的、不可变的,并且可以是除数组或正则表达式之外的任何类型。如果_id
包含子字段,则子字段名称不能以 ($
) 符号开头。 -
字段名称不能包含
null
字符。 -
服务器允许存储包含点 (
.
) 和美元符号 ($
) 的字段名称。 -
MongodB 5.0
改进了对在字段名称中使用 ($
) 和 (.
) 的支持。有一些限制。 -
每个字段名称在文档中必须是唯一的。 不得存储具有重复字段的文档,因为如果文档具有重复字段,
MongoDB CRUD
操作可能会出现意外行为。
2.2 主键
字段名称 _id
保留用作 主键, 它的值在集合中必须是唯一的、不可变的,并且可以是 除数组或正则表达式之外 的任何类型。如果 _id
包含子字段,则子字段名称不能以 ($
) 符号开头。在 MongoDB
中,存储在标准集合中的每个文档都需要一个唯一的 _id
字段作为主键。如果插入的文档省略了 _id
字段,则 MongoDB
驾驶员会自动为 _id
字段生成 ObjectId
。
_id
字段行为和约束:
-
默认情况下,
MongoDB
在创建集合期间会在_id
字段上创建唯一索引。 -
_id
字段始终是文档中的第一个字段。如果在服务器收到的文档中,_id
不是第一个字段,则服务器会将该字段移动到开头。 -
如果
_id
包含子字段,则子字段名称不能以 ($
) 符号开头。 -
_id
字段可以包含任何BSON
数据类型的值(数组、正则表达式或未定义类型除外)。
存储 _id
值常见选项:
-
使用对象标识符(
ObjectId
)。 -
使用自然唯一标识符(如果可用)。这样可以节省空间并避免附加索引。
-
生成一个自动递增的数字。
-
在应用程序代码中生成
UUID
。为了更有效率地将UUID
值存储在该集合和_id
索引中,请将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
。请注意,驱动程序实现可能会以不同的方式实施UUID
序列化和反序列化逻辑,这可能与其他驱动程序不完全兼容。