您的位置:首页 > 数据库 > Mongodb

MongoDB文档翻译-引言-文档

2017-02-23 13:42 260 查看
说明:英文原文地址:https://docs.mongodb.com/v3.2/core/document/

本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。

文档

MongoDB把数据记录存储为BSON文档。BSON文档是JSON文档的二进制表示,它比JSON包含更多的数据类型。BSON规范可参考bsonspec.org



文档结构

MongoDB的文档由键-值对组成,有如下结构:

{
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类型的值

字段名

字段名是字符串。

文档对字段名有如下限制:

字段_id是保留字段,作为主键用。它的值在文档中必须是唯一的,不可以修改,可以是除了数组外的任意类型。

字段名不能以美元符号($)开头

字段名不能包含点字符(.)

字段名不能包含null字符

BSON文档可能会有多个相同名字的字段。大多数MongoDB接口用一种不支持重复字段的机构(如哈希表)来表示文档。如果你需要操作有多个相同名字的字段的文档,参考驱动文档

某些由内部MongoDB进程创建的文档可能包含重复字段,但是MongoDB进程不会在用户文档中添加重复的字段。

字段值的限制

对于添加了索引的集合,所索引的字段的值有最大索引长度的限制。详情可参考最大索引长度

点记号法

MongoDB用
点记号法
来访问数组中的元素,以及嵌入文档的字段。

数组

要指定或访问一个以0开始作为下标的数组,把数组名、点(.)和下标连起来,然后用引号(“)围起来:

"<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-3
bae3
333" } },
...
}


要指定
name
字段中的
last
字段,用
"name.last"


要指定
contact
字段中的
phone
文档中的
number
字段,用
"contact.phone.number"


文档限制

对于文档,有如下限制:

文档大小限制

BSON文档的最大大小是16M。

最大文档大小是用来确保一个文档的大小不会超出内存大小,或者传输时不超出带宽。如要存储超出最大大小的文档,MongoDB提供了GridFS API。参考
mongofiles
和驱动文档以获得关于GridFS的更多信息。

文档字段顺序

MongoDB会保存写操作时的文档字段顺序,以下情况除外:

_id字段总是文档中的第一个字段

包含重命名字段的更新可能导致文档中字段顺序重排

从版本2.6开始,MongoDB总是试图保存文档中的字段顺序。

_id字段

MongoDB中,每个保存在集合中的文档都需要一个唯一的_id字段作为主键。如果插入的文档没有_id字段,MongoDB驱动自动为_id字段生成一个
ObjectId


通过带
upsert:true
选项的更新操作所插入的文档也会自动生成_id字段。

_id字段有如下行为和限制:

默认地,MongoDB在创建文档时在_id字段创建一个唯一索引。

_id字段总是文档的第一个字段。如果服务器收到一个_id字段不是在第一个位置的文档,服务器会把该字段移到开始。

_id字段可以是除数组类型外的其他任意BSON数据类型。

*警告:

为保证复制功能正常,不要在_id字段中存储BSON正则表达式。

以下是_id字段常用的值:

使用ObjectId

使用自然唯一标识符,如果可用的话。即节省空间,有避免了多余的索引。

生成自增数字

在应用代码中生成一个UUID。为了更有效的在集合和_id索引中存储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。注意,不同的驱动对UUID序列化和反序列化的实现逻辑可能不一样,可能在不同驱动之间不兼容。参考驱动文档查看关于UUID互操作性的更多信息。

注意:

大多数MongoDB驱动客户端在将插入操作发送到MongoDB前或把_id字段包含在内,生成一个ObjectId,然而,如果客户端发送了一个没有_id字段的无奈地,
mongod
会增加_id字段,生成ObjectId。

文档结构的其它用途

除了用文档结构来定义数据记录,MongoDB还将其贯穿于其它用途中,包含但不限于:查询过滤器、更新规则文档、索引规则文档。

查询过滤器文档

查询过滤器文档用于指定选择哪些记录来执行读取、更新、删除操作的条件。

可以用
<field>:<value>
表达式来指定相等操作和查询操作符表达式:

{
<field1>: <value1>,
<field2>: { <operator>: <value> },
...
}


更新规则文档

db.collection.update()
操作中,更新规则文档用更新操作符来指定特定字段上的数据修改。

{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}


索引规则文档

索引规则文档定义要建立索引的字段和索引类型:

{ <field1>: <type1>, <field2>: <type2>, ...  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: