mongodb将数据存为BSON 文档格式,BSON 是json文档的二进制格式,但是比json支持更多数据类型,详见:bsonspec.org
1、数据结构
mongodb文档由键值对组成
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}
value可以是任意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
保留作为主键; 取值在数据集中必须唯一, 不可修改, 除了数组可以是任意类型. - 不能有空字符.
- 顶层字段名不能以 (
$
) 开头.(即便支持也不推荐)
bson文档可以有多个相同名称不同类型字段,但部分接口不支持,若需支持参考:driver documentation
字段值限制
数据集中被索引的字段有最大长度限制,详见:Maximum Index Key Length
2、点标识符
访问数组元素
"<数组名>.<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"
.
更多用法详见:
3、文档限制
文档大小限制
bson文档最大容量是:16MB,以此保证一份文档不超出内存或网络带宽;若要存放更大的文档详见:GridFS API.
文档字段顺序
mongodb根据写操作维护字段顺序,除了以下情况:
_id
字段永远排首位- 更新字段名会导致重排序
_id
字段
mongodb每份文档需要唯一的_id 作为主键,若插入文档时省略,则由mongodb自动分配 ObjectId
4、文档结构其他用法
查询详见:
文档更新详见:
转自:https://docs.mongodb.com/manual/core/document/