Mongodb中 Documents文档说明
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
andlast
.birth
anddeath
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 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.
更新指定的文档
更新文档使用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文档说明的更多相关文章
- MongoDB学习(操作集合中的文档)
文档概念 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 insert()方法 ...
- MongoDB的学习--文档的插入、删除和更新
最近在看<MongoDB权威指南>,写博客记录一下相关内容~~ 关于安装之类的最基本的就不多说了,从基本操作增删改查开始. MongoDB官网地址:http://www.mongodb.o ...
- Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***.
Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***. Mongodb是一种面向文档的 ...
- MongoDB学习笔记——文档操作之增删改
插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...
- Mongoose在向集合中插入文档时的集合命名问题
Mongoose使用结构化的模式应用到MongoDB集合,为MongoDB Node.js原生驱动程序提供了更多的功能和简化了数据库操作. 从创建连接到向数据库中写入一个条数据经历了以下步骤: 1.连 ...
- SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- 如何在Linux中复制文档
在办公室里复印文档过去需要专门的员工与机器.如今,复制是电脑用户无需多加思考的任务.在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘的时候. 数字实体复制 ...
- 在SharePoint 2013 中使用文档库Scheduling (计划公布功能)
本文讲述在SharePoint2013 中使用文档库Scheduling (计划公布功能)的步骤和注意的事项. 文档库Scheduling (计划公布功能) 用于设定当文档通过审批后特定的时间区间内才 ...
- JavaScript中的文档模式和严格模式
JavaScript中的文档模式和严格模式 语法模式有普通模式和严格模式两种 普通模式:正常的JavaScript语法拼写以及代码编写(相对于严格模式存在着语法上的不严谨),尽可能的识别错误以及不规范 ...
随机推荐
- c#抽取pdf文档标题(4)——机器学习以及决策树
我的一位同事告诉我,pdf抽取标题,用机器学习可以完美解决问题,抽取的准确率比较高.于是,我看了一些资料,就动起手来,实践了下. 我主要是根据以往历史块的特征生成一个决策树,然后利用这棵决策树,去判断 ...
- WebService下实现大数据量的传输
设置RemotingFormat = SerializationFormat.Binary;再序列化,通过WebService传输,客户端接收,再反序列化,确实效果大大的优于直接传送DataSet,不 ...
- jquery pjax 用法总结
以前我们点击a链接的时候总是会刷新整个页面并跳转到新页面,中间可以很明显的看到短暂的白屏.pjax就很好的解决了这问题. pjax的原理很简单,就是发送一个ajax请求,获取html代码,再把相关代码 ...
- Openflow简介和安装
搞网络研究的,跟踪斯坦福stanford大学的研究就很重要. 因为思科CISCO与斯坦福的渊源太深了.被誉神雕侠侣的思科创始人Sandy Lerner夫妇,一个在计算机学院,一个在商学院. 最近去看了 ...
- WordPress博客彻底关闭图片缩略图功能的方法
最近感觉没发几篇文章,然后查看cpanel面板的时候发现不知不觉我的空间突然被占用了很多,不能忍啊,我查看了一下磁盘占用,发现是缩略图搞的鬼,我 的文章中的图片都是保存在七牛中的,只有特色图片是不能使 ...
- Firefox取消“订阅实时书签”功能
如果你勾选了Firefox“总是用实时书签订阅收取”, 一打开RSS页面就直接弹出添订阅实时书签对话,而当你想在火狐中直接查看RSS页面时,发现不知如何取消“订阅实时书签”功能了.就怨这个关闭功能藏的 ...
- 如何在eclipse中添加ADT
工具: Eclipse:官网下载地址:http://www.eclipse.org/downloads/下载SE或者EE版本的都可以 ADT:因为涉及到FQ问题,所以这里我给出一个参考网址:http: ...
- C# 中的关键字整理
C#中的所有关键字大致可以分为保留关键字和上下文关键字两部分 快来看一下有没有不认识的吧 欢迎补充 保留关键字 abstract as base bool break byte case ...
- 温故而知新—heap
堆:堆不是STL中的容器组件,堆有分为大根堆和小根堆,堆的底层实现可以用优先队列进行实现.底层的容器实际上是一个vector.在C++数据结构中,堆也可用数组来实现.对于使用C++的开发人员来说,st ...
- 需求分析---NABCD
N(Need,需求) 我们的产品未来天气,是为了解决不爱看天气预报的群众开发一款类似备忘录式的天气预报软件.很多人认为今天天气很好,明天肯定不会差,但是风云忽变,可能明天就降大雨,所以就忽略了带伞, ...