MongoDB学习
一.入门
- 行(row) ->文档(document);
- 表(table) -> 集合(collection);
- 一个MongoDB实例可以容纳多个独立的数据库,每一个都有自己的集合和权限;
- 每一个document都有自己的
_id
,它在document所处的collection是唯一的。
1. 文档(document)
- document中的键值对是有序的;
- document中的值(value)可以由很多类型,字符串,数字,一个另外的文档……
- document中的键(key)中:
- 不能有空字符;
- “.”和”$”有特殊的作用;
- 以”_”开头的键是保留的
MongoDB区分类型和大小写;
// 不同 {"foo": 3} {"foo: "3"}
// 也不同 {"foo": 3} {"Foo": 3}
MongoDB 不能有重复的键。
2. 集合(collection)
无模式:一个集合里的文档可以是各式各样的。
// 以下两个document可以存在在一个collection中,称为**无模式** {"greeting": "Hello World"} {"foo": 5}
但我们最后还在在一个collection中存放一类的数据
命名:
- 不能是”“(空字符串)
- 不能有空格
- 不能以
system.
开头,比如system.user
,system.namespaces
- 不能有保留字符”$”
使用子集合:比如一个博客功能的应用可以有
blog.authors
和blog.posts
,blog这个集合和它的两个子集合没有什么关系。
3. 数据库(db)
- 一个数据库可以有多个集合,应该将一个应用的所有数据存在一个数据库上。
数据库名最后会变成文件系统里的文件名,因此
- 不能是空串
- 不应有空格和其他转义
- 全部小写
- 最多64字节
保留的数据库名
- admin
- local
- config
4.启动Mongo
$ ./mongod
在没有参数的情况下会使用默认数据目录:/data/db
并使用27017
端口,在创建之前,如果数据目录不存在或不可写则创建失败。mkdir -p /db/data
。
如果端口被占用,则通常是已经启动了MongoDB实例。
可以用过http://localhost:28017
来访问数据库的管理信息。
5. MongoDB shell
shell中的基本操作:增删改查操作
6. 数据类型
MongoDB的数据类型扩展了JSON的6种类型:null,数字,字符串,布尔,数组和对象。
- JSON中没有日期类型;
- JSON中没有数字类型,不能区分整型和浮点型;
- 不能区分常用类型,比如正则表达式和函数
几点注意:
- js中只有一种数字类型,即64位双精度;默认情况下shell中的数字都被都被MongoDB当做双精度数。也就是说,如果我们从数据库中得到一个32位整数,修改文档并把文档存回数据库,即便这个整数完全不动,也会被修改为64为浮点数。所以,不要在shell下覆盖整个文档。
- 日期上,要使用
new Date()
而不要使用Date()
,前者返回一个日期对象,而后者返回一个字符串。