文档
在本页面
A MongoDB document.
MongoDB文档由字段和值对组成,并具有以下结构:
复制
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}
复制
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)
}
上面的 字段具有以下数据类型:
name
包含一个包含字段first
和last
的_嵌入式文档_。birth
和death
保留_Date_类型的值。contribs
拥有_字符串数组_。views
拥有_NumberLong_类型的值。
字段名称是字符串。
- 字段名称
_id
保留用作主键;它的值在集合中必须是唯一的,不可变的,并且可以是数组以外的任何类型。 - 字段名称不能包含
null
字符。 - 顶级字段名称不能以美元符号(
$
)字符开头。否则, 从MongoDB 3.6开始,服务器允许存储包含点(即.
)和美元符号(即$
)的字段名称。
重要
在查询语句中添加支持之前,不推荐在字段名称中使用
$
和 .
,官方MongoDB的驱动程序不支持。内部MongoDB流程创建的某些文档可能具有重复的字段,但是_任何_ MongoDB流程都_不会_向现有的用户文档添加重复的字段。
MongoDB使用_点符号_访问数组的元素并访问嵌入式文档的字段。
要通过从零开始的索引位置指定或访问数组的元素,请将数组名称与点(
.
)和从零开始的索引位置连接起来,并用引号引起来:复制
"<array>.<index>"
例如,给定文档中的以下字段:
复制
{
...
contribs: [ "Turing machine", "Turing test", "Turingery" ],
...
}
要指定
contribs
数组中的第三个元素,请使用点符号"contribs.2"
。有关查询数组的示例,请参见:
也可以看看
要使用点符号指定或访问嵌入式文档的字段,请将嵌入式文档名称与点(
.
)和字段名称连接在一起,并用引号引起来:复制
"<embedded document>.<field>"
例如,给定文档中的以下字段:
复制
{
...
name: { first: "Alan", last: "Turing" },
contact: { phone: { type: "cell", number: "111-222-3333" } },
...
}
- 要指定在字段中命名
last
的name
字段,请使用点符号"name.last"
。 - 要在字段
number
中的phone
文档中 指定contact
,请使用点号"contact.phone.number"
。
有关查询嵌入式文档的示例,请参见:
文档具有以下属性:
BSON文档的最大大小为16 MB。
最大文档大小有助于确保单个文档不会使用过多的RAM或在传输过程中占用过多的带宽。要存储大于最大大小的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参见
mongofiles
和驱动程序的文档。除_以下情况_外,MongoDB会在执行写操作后保留文档字段的顺序:
- 该
_id
字段始终是文档中的第一个字段。
该
_id
字段具有以下行为和约束:- 默认情况下,MongoDB 在创建集合期间会在
_id
字段上创建唯一索引。 - 该
_id
字段始终是文档中的第一个字段。如果服务器首先接收到没有该_id
字段的文档,则服务器会将字段移到开头。
警告
为确保复制正常进行,请勿在
_id
字段中存储BSON正则表达式类型的值。以下是用于存储值的常用选项
_id
:- 使用自然的唯一标识符(如果有)。这样可以节省空间并避免附加索引。
- 生成一个自动递增的数字。
- 在您的应用程序代码中生成一个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
。查询过滤器文档指定确定用于选择哪些记录以进行读取,更新和删除操作的条件。
复制
{
<field1>: <value1>,
<field2>: { <operator>: <value> },
...
}
有关示例,请参见:
复制
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
索引规范文档定义了要索引的字段和索引类型:
复制
{ <field1>: <type1>, <field2>: <type2>, ... }
下载内容包括以下资源:
- 演示使用MongoDB进行数据建模的方法
- 参考MongoDB模式及其等效RDBMS
- 应用程序现代化记分卡
译者:小芒果