澳门金莎娱乐网站Documents文档说明

作者: 数据库信息  发布:2019-10-18

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

【原文地址】

澳门金莎娱乐网站 1

引言

文档结构

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

{
    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.

MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性

Field Names

字段名是String类型

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

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

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

1.文档数据库

Field Value 限制

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

MongoDB用一个文档来表示一条记录,文档的数据结构由键值对组成。MongoDB文档类似于JSON对象,字段值可能是文档,数组,或文档数组。

点符号

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

 澳门金莎娱乐网站 2

澳门金莎娱乐网站 ,Arrays

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

"<array>.<index>"​

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

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

For examples querying arrays, see:

  • Query an Array
  • Query an Array of Embedded Documents

使用文档的优点:

嵌入的文档

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

"<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:

  • Query on Embedded/Nested Documents
  • Query an Array of Embedded Documents
  • 文档中字段值的数据类型同大多数编程语言中的原生数据类型一致。
  • 嵌入式文档和数组减少了连接查询的需求。
  • 动态的文档结构支持多态性。

文档的局限性

Documents有以下属性:

2.主要特性

Document Size Limit

bson文档的最大值是16M.

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

高性能

Document Field Order

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

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

MongoDB支持高性能数据存储。特别地:

The _id Field

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

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

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

_id值的常用选项:

  • 使用 ObjectId
  • 使用自然唯一标识符(如果可用)。 这节省了空间并避免了额外的索引。
  • 使用自增长的数字
  • 使用UUID
  • 支持嵌入式数据模型以减少对数据库系统的I/O
  • 利用索引实现快速查询,并且嵌入式文档和集合也支持索引

文档结构的其他用途

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

丰富的查询语言

查询文档

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

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

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

For examples, see:

  • Query Documents
  • Query on Embedded/Nested Documents
  • Query an Array
  • Query an Array of Embedded Documents

举一个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.

MongoDB提供了丰富的查询语言以支持读写操作和聚集操作、文本检索、地理信息查询

更新指定的文档

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

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

For examples, see Update specifications.

高可用性

索引规范文档

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

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

翻译自官网:  

 

转发注明出处: 

 

MongoDB的复制能力被称作复制集(replica set),它提供了自动的故障迁移和数据冗余。一个复制集是一组包含了相同数据的多台MongoDB服务器,它提供了冗余性和加强了数据的可用性。

横向扩展

MongoDB的横向扩展能力是其核心功能的一部分:

  • 分片的数据分布在服务器集群上。
  • 带标签的分片能够引导数据到指定的分片上。

支持多存储引擎

包括:WiredTiger Storage Engine,MMAPv1 Storage Engine。此外,MongoDB 提供可插拔存储引擎API,允许第三方开发者为MongoDB开发存储引擎。

 

3.数据库和集合

MongoDB 存储BSON文档,例如数据记录在集合中,集合在数据库中。

 澳门金莎娱乐网站 3

3.1数据库

在MongoDB 中数据库持有集合。

在Mongo shell中,选中一个数据库使用如下命令:use <db> ,例如:

use myDB

创建数据库

如果待操作的数据库不存在,那么在第一次向MongoDB 存储数据时,MongoDB会创建这个数据库。例如,使用如下命令操作一个不存在的数据库。

use myNewDB

db.myNewCollection1.insert( { x: 1 } )

insert()操作创建了数据库myNewDB,若集合myNewCollection1也不存在,同样地集合myNewCollection1也被创建。

3.2集合

MongoDB 在集合中存储文档,集合类似于关系数据库中的表。

创建一个集合

如果一个集合不存在,使用下面命令时集合会被创建:

db.myNewCollection2.insert( { x: 1 } )

db.myNewCollection3.createIndex( { y: 1 } )

insert() 和 createIndex()在集合不存在的情况下会创建集合。

显式创建集合

MongoDB 提供了db.createCollection()方法来显示地创建一个集合。可以为创建的集合指定参数,例如设置集合的大小或者文档的验证规则,如果不需要指定这些参数,那么没必要显示地创建一个集合。

文档验证(3.2版新特性)

默认情况下,一个集合中的文档不必具有相同的结构 ,

一个集中的文档不需要具有一系列相同的字段,并且不同文档中字段的数据类型可以不同。

修改文档结构

可以更改集合中的文档结构,如添加新字段,删除现有字段,或将字段值更改为一种新的类型,更新文档结构

3.3固定集合

3.3.1概述

固定集合,即具有固定大小的集合,它支持基于插入顺序的插入和查询这两种高通量操作。固定大小的集合的工作方式类似于循环缓存:一旦一个集合被填满,待插入的文档会覆盖掉最先插入的文档。

3.3.2行为

插入顺序

固定集合保证了插入顺序,因此对于查询操作而言,不需要索引的支持就可以返回多个按顺序排列的文档。没有索引的开销,固定集合支持更高的插入吞吐量。

自动删除最先插入的文档

为了给新文档让出存储空间,固定集合自动删除最先插入的文档而不需要显示的删除操作。

例如,集合oplog.rs中存储了副本集操作日志,这里副本集使用了固定集合。考虑下面对固定集合可能的操作:

  • 存储由大容量系统生成的日志信息。在无索引的情况下,文档插入固定集合的速度与将日志信息写入文件系统的速度相似。此外,先进先出的特性保证了事件的顺序,同时管理了存储的使用。
  • 在固定集合中缓存少量数据。由于缓存重读而非写,你应确保这个集合总在工作集中(例如,内存中)或接受一点点写操作,因为索引需要写操作。

_id 字段索引

固定集合含有_id字段,此字段索引是默认的。

3.3.3限制和建议

更新

如果你要更新固定集合中的文档,创建索引以防止全表扫描。

文档大小(3.2版本变更)

如果更新或替换操作改变了文档大小,则操作失败。

删除文档

不能删除固定集合中的文档,可使用drop() 命令删除整个固定集合并新建之。

分片

固定集合不允许分片。

查询效率

使用自然排序可高效地检索最新插入的元素。这是(有点)像追踪一个日志文件。

聚集操作符$out

不能使用聚集管道操作符$out将结果写入固定集合

3.3.4过程

创建固定集合

在mongo shel中,使用db.createCollection()方法创建固定集合,创建固定集合的时候要指定集合的字节大小,MongoDB将会提前为所创建的固定集合分配存储空间。固定集合的字节大小包含了内部使用的空间大小。

db.createCollection( "log", { capped: true, size: 100000 } )

如果字段的字节大小小于等于4096字节,那么固定集合的字节大小为4096字节。否则MongoDB 会将给定值提升为256字节的整数倍。

另外,你可以使用max 字段设置集合中文档的最大数量:

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

注意:对size的设置是必须的。在集合中的文档数量还未达到最大值而集合的字节大小已经达到最大时, MongoDB 同样会移除最先插入的文档。

查询固定集合

如果使用 find()方法查询固定集合而没有指定排序规则,查询返回结果的排序和文档插入时的排序是一样的。

为了使查询结果的排序与插入时相反,可以使用sort() 方法并将$natural参数设置为-1:

db.cappedCollection.find().sort( { $natural: -1 } )

检查集合是否为固定集合

使用isCapped()方法检查集合是否为固定集合:

db.collection.isCapped()

将集合转换为固定集合

使用convertToCapped 命令将一个非固定集合转换为固定集合:

db.runCommand({"convertToCapped": "mycoll", size: 100000});

size 参数设定了固定集合的字节大小。

警告:这个命令将会获得全局写入锁,它会阻塞其他操作直到此操作完成为止。

在指定的一段时间后自动移除数据

对于数据过期的情形,为支持额外的灵活性,可使用MongoDB的TTL索引。这些索引允许你利用一种特殊的类型使数据过期并从普通集合中移除,这种特殊的类型是基于时间字段值和TTL值的。

TTL集合与固定集合不兼容。

Tailable游标

对于固定集合,可以使用Tailable游标。Tailable游标类似于Unix 的tail -f命令,Tailable游标追踪固定集合的末端。新文档插入固定集合的同时,可以使用Tailable游标检索文档。

 

4.文档

MongoDB将数据存储为BSON 文档,BSON是一个JSON文档的二进制表示形式,但它所包含的数据类型比JSON多。

 澳门金莎娱乐网站 4

4.1 文档结构

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为嵌入式文档类型(embedded document),包括first和last字段
  • birth和death为日期类型(Date
  • contribs为字符串数组类型(array of strings
  • views为长整型(NumberLong )

字段名称

字段的名称是字符串。

对于字段的命名有下面的约束:

  • _id为保留字段,用做主键,_id的值与其所在的集合中必须唯一,不可更改,可以是除数组以外的任何类型。
  • 字段名称不能以“$”符开始。
  • 字段名称不能包含“.”。
  • 字段名称不能包含空字符。

BSON 文档允许有相同的字段名称。大多数的MongoDB接口不支持字段名称重复。如果需要重复的字段名称,请查看你所使用的驱动文档。

MongoDB内部处理程序创建的文档可能会有重名的字段,但不会向用户文档中添加重名字段。

字段值约束

对于已经索引的集合来说,索引字段值有最大索引键值长度(Maximum Index Key Length)限制。

4.2 圆点记法

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

数组

MongoDB中数组是基于0索引的。使用圆点连接集合名称和索引位置:

"<array>.<index>"

例如,给定下面的文档

{

   ...

   contribs: [ "Turing machine", "Turing test", "Turingery" ],

   ...

}

为了访问第三个元素,可以这样:contribs.2

嵌入式文档

使用圆点连接嵌入式文档名称和文档字段名称:

"<embedded document>.<field>"

例如,给定下面的文档

{

   ...

   name: { first: "Alan", last: "Turing" },

   contact: { phone: { type: "cell", number: "111-222-3333" } },

   ...

}

  • 为了指定last字段,使用"name.last"。
  • 为了指定number字段,使用"contact.phone.number"

4.3 文档约束

文档大小约束

BSON 文档最大为16MB。设置单个文档大小的最大值有助于确保单个文档不会耗尽系统内存,或者在传输的过程中不会占用太多的带宽。为了能够存储超过最大值的文档,MongoDB提供了GridFS API。

文档字段顺序

除以下情况外,MongoDB保持写入时的字段顺序:

  • _id字段总是位于文档的首位。
  • 重命名字段可能会引起字段重新排序。

从2.6版本开始MongoDB保持写入时的字段顺序,但之前的版本并非如此。

_id字段

在MongoDB中,文档需要_id字段作为主键,如果插入文档时没有指定_id字段,MongoDB会使用ObjectIds 作为默认的_id的默认值。例如,向集合中插入一个不包含位于文档开始处的_id字段的文档,MongoDB会将_id添加进来并且其类型为ObjectIds 。

另外,如果Mongod接收一个待插入的不包含_id字段的文档,Mongod将会添加一个ObjectIds 类型的字段。

本文由金沙澳门官网发布于数据库信息,转载请注明出处:澳门金莎娱乐网站Documents文档说明

关键词: 金沙澳门官网

上一篇:Manual阅读笔记,Sharding分片配置
下一篇:没有了