MongoDB权威指南(第2版)
上QQ阅读APP看书,第一时间看更新

2.1 文档

文档是MongoDB的核心概念。文档就是键值对的一个有序集。每种编程语言表示文档的方法不太一样,但大多数编程语言都有一些相通的数据结构,比如映射(map)、散列(hash)或字典(dictionary)。例如,在JavaScript里面,文档被表示为对象:

          {"greeting" : "Hello, world! "}

这个文档只有一个键"greeting",其对应的值为"Hello, world! "。大多数文档会比这个简单的例子复杂得多,通常会包含多个键/值对:

          {"greeting" : "Hello, world! ", "foo" : 3}

从上面的例子可以看出,文档中的值可以是多种不同的数据类型(甚至可以是一个完整的内嵌文档,详见2.6.4节)。在这个例子中,"greeting"的值是一个字符串,而"foo"的值是一个整数。

文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

· 键不能含有\0(空字符)。这个字符用于表示键的结尾。

· .和$具有特殊意义,只能在特定环境下使用(后面的章节会详细说明)。通常,这两个字符是被保留的;如果使用不当的话,驱动程序会有提示。

MongoDB不但区分类型,而且区分大小写。例如,下面的两个文档是不同的:

        {"foo" : 3}
        {"foo" : "3"}

下面两个文档也是不同的:

        {"foo" : 3}
        {"Foo" : 3}

还有一个非常重要的事项需要注意,MongoDB的文档不能有重复的键。例如,下面的文档是非法的:

        {"greeting" : "Hello, world! ", "greeting" : "Hello, MongoDB! "}

文档中的键/值对是有序的:{"x" : 1, "y":2}与{"y": 2, "x": 1}是不同的。通常,字段顺序并不重要,无须让数据库模式依赖特定的字段顺序(MongoDB会对字段重新排序)。在某些特殊情况下,字段顺序变得非常重要,本书将就此给出提示。

一些编程语言对文档的默认表示根本就不包含顺序问题(如:Python中的字典、Perl和Ruby 1.8中的散列)。通常,这些语言的驱动具有某些特殊的机制,可以在必要时指定文档的顺序。