MongoDB学习笔记(三):文档

完整的MongoDB学习笔记位于IT老兵博客

MongoDB学习笔记:文档。

前言

最近有点忙,足有一周没有继续这个系列(而原计划是用一到两个月的时间完成这个系列的笔记的),按照20英里法则,这样的学习效果不好,今天抽空还是写了一篇,很多事,贵在坚持。

上一篇文章,其实题目起错了,不应该包含文档,因为上一篇文章的内容并没有文档的内容,不过CSDN的MD这种方式,修改题目总是不成功,只好在自己的博客修改,这样两篇文章的题目有些不一致了。

正文

文档结构

MongoDB的文档相当于MySQL的行,但是格式都是JSON的,而存储的格式是BSON,是二进制的保存JSON的格式。

文档的结构是域(field)-值(value)对,类似如下的结构:

1
2
3
4
5
6
7
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

值字段可以包含任意BSON数据类型,或者其他文档,或者数组,文档数组,例如:

1
2
3
4
5
6
7
8
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)
}

域的名字和值各有一些限制,这个一般不会触及,所以暂时忽略—-当然,触及的时候,可以查一下手册。

点符号

Array(数组)

访问数组的方式,是数组名+“.”+索引(索引是从0开始),如下:

1
"<array>.<index>"

举个例子(摘自官网):

1
2
3
4
5
{
...
contribs: [ "Turing machine", "Turing test", "Turingery" ],
...
}

想访问数组的第三个元素“Turingery”,就使用“contribs.2”。

Embedded Documents(嵌入的文档)

想访问嵌入的文档,使用文档名+“.”+“域名”的访问方式,语法如下:

1
"<embedded document>.<field>"

举例:

1
2
3
4
5
6
{
...
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。

文档域的顺序

文档遵循着写的操作顺序

MongoDB preserves the order of the document fields following write
operations…

文档保留着写操作的顺序–这句话有点没理解,是按照第一次写入的顺序吗?
除了:

  • _id域永远是第一位的。
  • 更新有可能会改变顺序。

_id域

_id域是主键,如果插入时忽略了,系统会自动加上这个字段。

By default, MongoDB creates a unique index on the _id field during the creation of a collection.


The _id field is always the first field in the documents. If the server receives a document that does not have the _id field first, then the server will move the field to the beginning.


The _id field may contain values of any BSON data type, other than an array.

  • _id是作为唯一索引的。
  • _id永远是文档的第一个域。
  • _id可以是任何BSON类型,除了数组。

文档结构的其他使用

用于查询过滤器(这篇帖子已经完成),更新规格文档、索引规格文档,这些需要将来细化,这里就不赘述了,官网这里也是给了一个引子,如果不具体看相应的内容,是没有用的。

总结

足有一周没有继续这个系列了,心里有些慌,今天终于又完成一篇,心里略微踏实了一些—-尽快有些仓促。

参考

https://docs.mongodb.com/manual/core/document/#bson-document-format