资讯专栏INFORMATION COLUMN

(翻译) MongoDB(4) 文档

TNFE / 502人阅读

摘要:使用文档来存储数据纪录。是文档的二进制表示。文档的局限性文件有以下属性文档大小限制文档的最大值为。存储的文档的大小超过了最大值,提供。在版本之前,不会尽量维持原文档中的字段顺序。更新文档更新文档使用更新操作中指定字段去执行指定数据的修改。

MongoDB使用BSON文档来存储数据纪录。BSON是JSON文档的二进制表示。尽管它比JSON包含更多的数据类型。对于BSON规范,查看bsonspec.org,另请参见BSON类型。

文档结构

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 是一个嵌入式文档,包含firstlast

birthdeath包含数据类型的值

contribs 包含一个字符串数组

views包含 NumberLong 类型

字段名称

字段名称是字符串。
文档对于字段名具有以下限制:

字段名_id被保留用来作为主键,在集合中它的值必须是唯一的,是不可变的,可以是除数组外的任何类型

字段名称不能为美元符号$开头

字段名称不能包含.字符

字段名称不能包含null字符
BSON文档可以有多个相同的字段名,大多数 MongoDB接口,然而,表示一个结构的MongoDB (即哈希表) 不支持重复的字段名称,如果你需要操作多个相同字段名的文档,请查阅你的驱动文档。

一些通过内部MongoDB进程创建的文档可能会包含重复的字段, 但是 MongoDB进程将永远不会添加重复的字段到一个已存在的用户文档。

字段值限制

对于已索引的集合,索引字段的值将会有一个最大索引Key的长度限制。查阅最大索引Key长度来获取详情。

点符号

MongoDB使用点符号来访问数组中的元素和内嵌文档的字段。

数组

通过从0开始的数字下标来指定或者访问数组中的一个元素。用点符号来连接数组名称和从0开始的数字下标,并用引号包括起来:

"."

例如,在一个文档中给出以下字段:

{
   ...
   contribs: [ "Turing machine", "Turing test", "Turingery" ],
   ...
}

指定数组中contribs字段中的第三个元素,使用点符号contribs.2
另请参阅:

当更新时,使用$映射来操作符

当数组的索引位置未知的时候,$可以映射为操作符

在数组中使用点符号查询数组的例子

内嵌文档

使用点符号指定或者访问一个内嵌文档的字段,使用点符号来连接内嵌文档名称和字段名称,并用引号包括起来:

"."

例如,在一个文档中给出以下字段:

{
   ...
   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。
最大文档的大小有助于确保一个文档不能使用过多的RAM或者在传输的过程中也会占用大量的带宽。存储的文档的大小超过了最大值,MongoDB提供 GridFS API。参阅 mongofiles和你的驱动文档关于GridFS的更多信息。

文档字段排序

MongoDB会维持在写入操作中文档字段的顺序,下列情况除外:

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

包含字段名重命名的更新操作可能会导致文档的字段重新排序
在2.6版本中改变:自2.6版本开始,MongoDB会尽量维持原文档中的字段顺序。在2.6版本之前,MongoDB不会尽量维持原文档中的字段顺序。

_id字段

在MongoDB中,集合中保存文档需要一个唯一的_id字段作为主键。如果_id字段在文档中未指定,MongoDB会将 ObjectId作为_id字段的默认值,即如果一个文档在插入的时候在顶级字段中不包含_id,MongoDB驱动会增加一个带有ObjectId_id字段。
除此以外,如果Mongod接收一个不包含_id字段的文档来插入(即通过一个更新操作来执行upsert选项),Mongod将会增加一个带有ObjectId_id字段。
_id字段具有以下行为和约束:

默认情况下,在一个集合创建的时候,MongoDB在_id上创建一个唯一索引。

_id总是在文档的第一个字段。如果服务器接收到的文档_id文档不在最前面,那么服务器将会移动该字段到文档的开始。

_id字段可能会包含除了数组之外的任何BSON数据类型
警告:为了保证复制功能,不要保存_id字段为BSON正则表达式类型的值。

下列是用来保存_id值的常见做法:

使用一个ObjectId

如果可以用的话,使用一个天然的唯一标识符。这样节省了空间和避免了额外索引。

生成一个自增数字

在你的程序中生成一个UUID。在集合中和_id字段中更高效的存储UUID的值,存储UUID的值使用BSON的BinDate类型
索引键属于 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驱动客户端将会在发送插入操作到MongoBD之前包含_id字段并生成一个ObjectId;然而,如果客户端发送一个不包含_id字段的文档,Mongod将会增加一个_id字段和生成一个ObjectId

文档结构的其他用户

除了定义数据纪录,MongoDB全部使用文档结构,包含并不限于:查询过滤器,更新指定文档和索引指定文档等。。。

查询文档筛选

查询文档筛选指定条件来确定那些文档可以执行读取,更新和删除操作。
你可以使用:来指定相等的条件表达式和执行操作表达式。

{
  : ,
  : { :  },
  ...
}

更多例子,请查看查询过滤或者规范。

更新文档:

更新文档使用db.collection.update()更新操作中指定字段去执行指定数据的修改。

{
  : { : , ... },
  : { : , ... },
  ...
}

更多例子,请查看更新规范。

索引文档

索引文档定义字段索引和索引类型:

{ : , : , ...  }
其他资源

文档思考第一部分

下一章:https://segmentfault.com/a/11...
原文地址:https://docs.mongodb.com/manu...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18886.html

相关文章

  • (翻译) MongoDB(5) BSON类型

    摘要:类型数字别名注意已过时布尔日期正则表达式位整数时间戳位整数要确定字段的类型,请查看在中检验类型。是位整数,代表自纪元年月日以来的毫秒数。 BSON是一个用来存储文档的二进制序列化格式,并且可以在MongoDB中远程调用。该BSON规范位于bsonspce.org。 BSON在文档中支持下列数据类型作为值。每个数据类型都有相对应的数字和字符串别名用 $type 操作执行BSON类型来查询...

    KnewOne 评论0 收藏0
  • (翻译) MongoDB(15) 在 Tarball 上安装MongoDB社区版

    摘要:概述的社区版的编译版本没有为其它系统安装社区版的支持包提供了一个简单的选项注意建议不要使用这种办法除非你有特定的需要可用的软件包不能解决的时候安装社区版提供了位和位已弃用的构建的归档。选择适合你的系统的安装流程。 概述 Linux的MongoDB社区版的编译版本没有为其它 Linux 系统安装MongoDB社区版的支持包提供了一个简单的选项 注意: 建议不要使用这种办法, 除非你有特...

    harryhappy 评论0 收藏0
  • (翻译) MongoDB(16) 在 OS X 上安装MongoDB社区版

    摘要:概述使用本教程在系统上安装社区版平台支持自版本开始仅支持和更高版本的通过最流行的软件包管理工具或者下载网站安装的是可用的安装社区版注意安装以前的版本请参考那个版本的文档例如参阅版本你可以使用或者手动安装社区版这部分两个方法都有介绍使用安装 概述 使用本教程在 OS X 系统上安装 MongoDB 社区版. 平台支持: 自3.0版本开始, MongoDB 仅支持 OS X 10.7 (...

    tigerZH 评论0 收藏0
  • (翻译) MongoDB(1) 简介

    摘要:文档数据库在中,一条纪录就是一个文档,它是由字段和值对组成的数据结构。尤其是在数据库系统中,对于嵌入式数据模型的支持减少了活动。它提供自动故障转移数据冗余副本集是一组服务器,保持相同的数据集,提供冗余和提高数据可用性的。 MongoDB 是一个提供了高性能、高可用、自动扩展的开源的文档数据库。 文档数据库 在MongoDB中,一条纪录就是一个文档,它是由字段和值对组成的数据结构。Mon...

    Magicer 评论0 收藏0
  • (翻译) MongoDB(2) 数据库和集合

    摘要:例如,在集合中的数据纪录在数据库中的集合。因此,你可以切换到一个不存在的数据库,并且在中执行以下操作如果它们不存在的时候,创建了数据库和集合。限制数据库名字的列表,请参阅命名限制。集合在集合中存储文档。集合是类似关系数据库的表。 MongoDB 存储BSON文档。例如,在集合中的数据纪录;在数据库中的集合。showImg(https://segmentfault.com/img/bVC...

    GeekGhc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<