mongodb使用BSON格式存储数据记录. 如下图:

文档结构

文档有键值对组成, 有以下结构:

{
    field1: value1,
    field2: value2,
    ...
    fieldN: valueN
}​

字段的值可以是任意BSON 数据类型,包括其他文档, 数组和文档数组.

例如,以下文档包含不同类型的值:

{
     _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 and last.
  • birth and death hold values of the Date type.
  • contribs holds an array of strings.
  • views holds a value of the NumberLong type.

Field Names

字段名是String类型

文档在字段名上有以下限制:

  • 字段名称 _id保留用作主键; 它的值在集合中必须是唯一的,是不可变的,并且可以是除数组以外的任何类型。
  • 不能以$ 开头
  • 不能包含 点(.) 字符
  • 不能包含空字符

有时候bson 文档可能有多个字段使用同一个名字.这种情况,参考:driver documentation .

Field Value 限制

对于索引集合,索引字段的值具有最大索引键长度限制。 有关详细信息, SeeMaximum Index Key Length 。

点符号

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

Arrays

要通过基于零的索引位置指定或访问数组的元素,请将数组名称与点(.)和从零开始的索引位置连接起来,并用引号引起来:

"<array>.<index>"​

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

要访问第三个字符:"contribs.2".

For examples querying arrays, see:

嵌入的文档

要使用点符号指定或访问嵌入式文档的字段,使用以下格式: 嵌入文档名称.字段名:

"<embedded document>.<field>"​

{
...
name: { first: "Alan", last: "Turing" },
contact: { phone: { type: "cell", number: "111-222-3333" } },
...
}

上边的 name, contact,以及嵌入在contact里边的phone都是嵌入式文档.

指定name字段中的last : "name.last".

在contact 中指定phone的号码: "contact.phone.number".

For examples querying embedded documents, see:

文档的局限性

Documents有以下属性:

Document Size Limit

bson文档的最大值是16M.

最大的文档大小有助于确保单个文档不能使用过多的RAM,或者在传输过程中使用过多的带宽。 为了存储大于最大大小的文档,MongoDB提供了GridFS API。 有关GridFS的更多信息,请参阅mongofiles和驱动程序的文档。

Document Field Order

除以下情况外,MongoDB保留写入操作之后的文档字段的顺序:

  • The _id 永远是文档的第一个字段
  • renaming 字段名可能会导致字段重排序.

The _id Field

在MongoDB中,存储在集合中的每个文档都需要一个唯一的_id字段作为主键。 如果插入的文档省略_id字段,则MongoDB驱动程序自动为_id字段生成一个ObjectId。

_id字段有以下行为和约束:

  • 默认情况下,MongoDB在创建集合时在_id字段上创建一个唯一的索引。
  • _id字段总是文档中的第一个字段。 如果服务器收到一个没有_id字段的文档,那么服务器将把字段移到开头。
  • _id字段可能包含任何BSON数据类型的值,除了数组。

_id值的常用选项:

  • 使用 ObjectId
  • 使用自然唯一标识符(如果可用)。 这节省了空间并避免了额外的索引。
  • 使用自增长的数字
  • 使用UUID

文档结构的其他用途

除了定义数据记录之外,MongoDB还一直使用文档结构,包括但不限于:query filtersupdate specifications documents, and index specification documents.

查询文档

查询过滤器指定纪录被选中的条件.

你可以使用<field>:<value> 表达式指定相等条件和查询运算符表达式。

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

For examples, see:

举一个Query Documents的例子:

db.inventory.find( { status: "D" } )​

inventory 集合中找出status = "D"的记录. 与sql 中的语句一致:

SELECT * FROM inventory WHERE status = "D"​

查询过滤器文档可以使用查询运算符来指定以下形式的条件:

{ <field1>: { <operator1>: <value1> }, ... }​

下边的例子展示从inventory  集合中检索 status等于"A"或"D"的记录.

db.inventory.find( { status: { $in: [ "A", "D" ] } } )​

这个语句与下边sql的语句一致:

SELECT * FROM inventory WHERE status in ("A", "D")​

还有and 和or 的用法,想看的看这个文档Query Documents.

更新指定的文档

更新文档使用update operators 来指定在db.collection.update() 操作期间在指定字段上执行的数据修改。

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

For examples, see Update specifications.

索引规范文档

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

{ <field1>: <type1>, <field2>: <type2>, ... }​

翻译自官网: https://docs.mongodb.com/manual/core/document/

转发注明出处: http://www.cnblogs.com/jycboy/p/8718320.html

Mongodb中 Documents文档说明的更多相关文章

  1. MongoDB学习(操作集合中的文档)

    文档概念 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 insert()方法 ...

  2. MongoDB的学习--文档的插入、删除和更新

    最近在看<MongoDB权威指南>,写博客记录一下相关内容~~ 关于安装之类的最基本的就不多说了,从基本操作增删改查开始. MongoDB官网地址:http://www.mongodb.o ...

  3. Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***.

    Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***. Mongodb是一种面向文档的 ...

  4. MongoDB学习笔记——文档操作之增删改

    插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...

  5. Mongoose在向集合中插入文档时的集合命名问题

    Mongoose使用结构化的模式应用到MongoDB集合,为MongoDB Node.js原生驱动程序提供了更多的功能和简化了数据库操作. 从创建连接到向数据库中写入一个条数据经历了以下步骤: 1.连 ...

  6. SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  7. 如何在Linux中复制文档

    在办公室里复印文档过去需要专门的员工与机器.如今,复制是电脑用户无需多加思考的任务.在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘的时候. 数字实体复制 ...

  8. 在SharePoint 2013 中使用文档库Scheduling (计划公布功能)

    本文讲述在SharePoint2013 中使用文档库Scheduling (计划公布功能)的步骤和注意的事项. 文档库Scheduling (计划公布功能) 用于设定当文档通过审批后特定的时间区间内才 ...

  9. JavaScript中的文档模式和严格模式

    JavaScript中的文档模式和严格模式 语法模式有普通模式和严格模式两种 普通模式:正常的JavaScript语法拼写以及代码编写(相对于严格模式存在着语法上的不严谨),尽可能的识别错误以及不规范 ...

随机推荐

  1. cache 订单队列 - TP5

    使用cache实现一个简单粗糙的订单推送队列 Linux  定时任务 * * * * * /usr/bin/curl  http://tc.m.com/test.php /** * User: [一秋 ...

  2. java--Object类接受任意引用数据类型对象

    java学习进展到类,首先就对万类之父Object类进行举例练习,这里我是对一维数组和接口用Object接受数组和接口. package test1; public class enum1 { pub ...

  3. oled

    gnd.vcc.clk.miso.rst.mosi.cs

  4. Python包和版本管理的最好工具----pipenv

    pipenv 是Kenneth Reitz大神的作品,提供Python的各个版本间的管理,各种包管理.个人觉得是virtualenv pip等工具的合体. pipenv主要有以下特性: (1)以前我们 ...

  5. c运行时函数参考学习地址

    https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/c-run-time-library-reference http://pubs.open ...

  6. Silverlight的认识

    Microsoft Silverlight是一个跨浏览器的.跨平台的插件.Silverlight提供灵活的编程模型,并可以很方便地集成到现有的网络应用程序中.Silverlight可以对运行在Mac或 ...

  7. SSM 使用 mybatis 分页插件 pagehepler 实现分页

    使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性. Mybatis分页插件 demo 项目地址:https://gitee.com/fre ...

  8. 自定义TabBar之理解hittest

    需求的TabBar是这样的:5个 tabItem, 中间的那个 item 部分超出系统默认TabBar的上边界. 那么实现的关键点就是如何在点击它突出的部分的时候,也可以正常获得响应.我来把问题简化, ...

  9. Ubuntu上安装和使用RabbitMQ

    1. 安装RabbitMQ服务软件包 输入以下命令进行安装 #apt install rabbitmq-server 2.安装完成后在rabbitMQ中添加用户 命令:#rabbitmqctl add ...

  10. Redis --> Ubuntu安装redis

    Ubuntu安装redis   一.下载安装 root@21ebdf03a086:/# apt-cache search redis root@21ebdf03a086:/# apt-get inst ...