文档
文档就是键值对的一个有序集。每种编程语言表示文档的方法不太一样,但大多数编程语言都有一些想通的数据结构,比如映射、散列、字典。
MongoDB不但区分类型,而且区分大小写。
例:
下面两个文档是不同的
{"foo":3}
{"foo":"3"}

下面两个文档是不同的
{"foo":3}
{"Foo":3}

MongoDB的文档不能有重复的键。
文档中的键/值对是有序的:{"x":1,"y":2}与{"y":2,"x":1}是不同的。


集合
集合就是一组文档。如果将mongoDB中的一个文档比喻为关系型数据库中的一行,那么一个集合就相当于一张表
1、动态模式
集合是动态模式的。这意味着一个集合里面的文档可以是各式各样的。因为集合里面可以放置任何文档,随之而来的一个问题是:还有必要使用多个集合吗?
使用多个集合的原因:
*不利于开发和管理
*分开查询多个集合要快得多
*把同种类型的文档放 在一个集合里,数据会更中集中。
*可以更有效地对集合进行索引

数据库
在MongoDB中,多个文档组成集合,而多个集合可以组成数据库。一个MongoDB实例可以承载多个数据库,
数据库名区分大小写,简单起见,数据库名应全部小写。
数据库最终会变成文件系统里的文件,而数据库名就是相应的文件名,这是数据库名有如此多限制的原因。
保留数据库名:admin    local     config


MongoDB在保留JSON基本键/值对的基础上,添加了其他一些数据类型。
*null
用于表示空值或者不存在的字段:{"x":null}
*布尔型
{"x":true}
*数值
shell默认使用64位浮点型数值。对于整数型,可使用NumberInt类(表示4字节带符号整数)或NumberLong类(表示8字节带符号整数):
{"x":NumberInt("3")}
{"x":NimberLong("3")}
*字符串
{"x":"foobar"}
*日期
{"x":new Date()}
*正则表达式
查询时,使用正则表达式作为限定条件,语法也与JavaScript的正则表达式语法相同:
{"x":/foobar/i}
*数组
{"x":["a","b","c"]}
*内嵌文档
文档可以内嵌其他文档,被嵌套的文档作为父文档的值:
{"x":{"foo":"bar"}}
*对象id
对象id是一个12字节的ID,是文档的唯一标识。
{"x":ObjectId()}
*二进制数据
*代码
查询和文档中可以包括任意JavaScript代码: