博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

mongo权威指南学习笔记-入门

Posted on 2014-03-27 09:31  法号戒智  阅读(203)  评论(0)    收藏  举报

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"值。