mongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限。
每一个文档都有一个特殊的的键_id,他在文档所处的集合是唯一的。
文档
文档的键是字符串,键值可以使用任意UTF-8字符。
键不能包含\0字符,这个字符用来表示键的结尾。
MonoDB不但区分类型,也区分大小写。例如下面两个文档是不同的:
{"foo": 3}
{"foo": "3"}
以下文档也是不同的:
{"foo": 3}
{"Foo": 3}
MongoDB中文档不能有重复的键。
子集合
组织集合的一种惯例是使用"."字符分开的按命名空间划分的子集合。例如一个带有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors。这样做目的是为了使组织结构更好些,也就是说blog这个集合(这里根本就不需要存在)及其子集合没有任何关系。
数据库
mongoDB中每个数据库都有独立的权限控制,即便是放在磁盘上,不同的数据库放置在不同的文件中。数据库名最终会变成文件系统里的文件。
集合名
使用db.集合名的方式访问集合一般不会有问题,但如果集合名恰好是数据库类的一个属性就有问题了,如要访问version这个集合,使用db.version就不行,因为db.version是个数据库函数。
当javascript只有在db找不到指定的属性时,才将其作为集合返回。当有属性与目标集合同名时,可以使用geCollection函数。
基本数据类型
null: {"x": null}
布尔: {"x": true}
32位整数
64位整数
64位浮点数: {"x": 3.14}
字符串: {"x": "abc"}
对象id(对象id是文档12字节的唯一ID): {"x": ObjectId()}
日期(日期类型存储的是从标准纪元开始的毫秒数): {"x": new Date()}
正则表达式: {"x": /foobar/i}
代码(文档中还可以包含Javascript代码): {"x": function (){ ...}}
二进制
最大值
最小值
符号类型
未定义(javascript中的undefined类型): {"x": undefined}
数组: {"x": [ 1, 2, 3]}
内嵌文档: {"x": {"foo" : "bar"}}
日期
在javascript中,Date对象用作MongoDB的日期类型,创建一个Date对象的时候,通常会调用new Date(...)而不是Date(...),字符串和日期不能相互匹配,这回给删除,更新,查询等操作带来问题。
_id和ObjectID
mongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象。一个集合里面每个文档都有唯一的"_id"值,来确保集合里面的每个文档都能被唯一标识。ObjectId不同的机器都能用全局唯一的同种方法方便的生成它。ObjectId使用12字节存储空间,12字节按照如下方式生成:
0|1|2|3|4|5|6|7|8|9|10|11
时间戳 | 机器 |PID| 计数器
插入数据的时候"_id"键通常会在客户端由驱动程序完成创建,如果驱动程序允许服务器生成ObjectId,那么将需要单独的查询,以确定插入的文档中的"_id"值。
浙公网安备 33010602011771号