MongoDB文档翻译-引言-文档

说明:英文原文地址: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-3333" } },
   ...
}
  • 要指定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>, ...  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值