MongoDB以BSON文档的方式存储数据记录,BSON是JSON文档的一种二进制显示,但是它比JSON包含更多的数据类型。
MongoDB文档结构:
MongoDB文档是由键值对组成并且具有以下结构:
{
field1: value1,
field2: value2,
field3: value3,
…
fieldN: valueN
}
MongoDB文档中键所对应的值可以是任何BSON支持的数据类型,包括其他的文档,数组,文档数组。
MongoDB文档中的键:
(1)字符串
(2)键名”_id”被保留用于主键,它的值在集合中必须是惟一的,不可改变的,除数组类型以处的任意类型数据。
(3)键的名称不能以$开始。
(4)键名不能包含”.”字符。
(5)键名不能包含空字符。
BSON文档可能包含许多同名的键,但是MongoDB不支持重名的键。如果需要处理含有许多同名键的文档,则需要自己实现。
由MongoDB内部进程创建的文档可能存在重复的键,但是对于已经存地用户文档,MongoDB的进程永远不会添加重的键。
MongoDB文档中键对应的值的限制:
对于含有索引的集合,被添加索引的键的值具有最大索引键长度限制。
MongoDB使用”.”的方式访问数组元素和内嵌的文档。
BSON文档最大限制16MB,以确保不占用太大内存或者传输时点用太多宽带。如果要存储文档大于16MB的文档,可以查看MongoDB
提供的GridFS API。
MongoDB保持文档中键的写操作顺序(2.6版本以后),除了以下两种情况:
(1)_id总是文档中的第一顺序键。
(2)更新包含重命名键名称可能导致文档中所有键的重新排序。
在Mongo中,以集合形式存储的文档都要求一个惟一的_id域(键)作为主键。如果一个已插入的文档遗漏了_id域,Mongo驱动会
自动生成一个ObjectId给_id域(同样适用于通过修改插入的upsert操作)。
_id域有以下行为与约束:
(1)默认情况下,在一个集合在创建时,MongoDB会在_id域上创建一个惟一索引。
(2)_id域总是文档的第一个域,如果服务器接收到的一个文档不是以_id开始的,那么,服务器会首先把_id挪到开始处。
(3)_id域的值可以是任何BSON数据类型的值,除了数组。
_id域通常存储的值:
(1)使用ObjectId.
(2)如果可能使用自然惟一标识符,这样节省了空间,也避免了额外的索引。
(3)生成一个自动增长的数字。
(4)在程序代码中生成UUID。为更有效的在集合中和_id域索引中存储UUID值,最好以BSON BinData类型存储。
文档过虑查询指定决定查询,更新和删除哪些记录的条件。可以通过field:value指定过滤条件。
可以通过以下方式给域指定索引
{field1:type1,field2:type2,…}
field为域名,type为索引类型