安装MongoDB参考点击打开链接
一、什么是MongoDB
MongoDB是由C++语言编写的,是一个基于分布式文件储存的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器的性能。
MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)组成,MongoDB文档类似于json对象。字段值可以包含其他文档,数组及文档数据。
通过下图实例可以直观了解一些MongoDB的概念:
数据库
MongoDB的默认数据库是“db”,该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的权限和集合,不同数据库也放在不同文件中。
执行"show dbs"命令可以显示所有数据库的列表
> show dbs
local 0.000GB
>
执行"db"命令可以显示当前数据库对象或集合
> db
test
>
运行"use"命令,可以连接到一个指定的数据库
> use local
switched to db local
> db
local
>
有些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
- admin:这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或关闭服务器。
- local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
- confi:当MongoDB用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
文档是一个键值(key-value)对,即BSON。MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别。
一个简单的文档例子:
{"site":"www.baidu.com","name":"百度"}
这里有一些基本的术语: 点击打开链接 总结重要的几点:
- 文档中的键/值都是有序的;
- 文档中的值不仅可以是双引号里面的字符串,也可以是其他几种数据类型,甚至是整个嵌入的文档;
- MongoDB区分类型和大小写;
- MongoDB的文档不能有重复的键;
- 文档的键是字符串。除少数例外,键可以使用任意UTF-8字符。
文档键命名规范:
- 键不能含有空字符,这个字符表示键的结尾。
- .和$有特殊意义,只能在特殊的环境下应用。
- 以下划线"_"开头的键是保留的。
集合就是MongoDB文档组。集合存在数据库中没有固定的结构,意味着插入的数据可以是不同格式和类型的数据,但通常情况下插入的数据都具有关联性。
比如,我们可以将以下不同数据结构的文档插入到集合中去:
{"site":"www.baidu.com"}
{"site":"www.baidu.com","name":"百度"}
{"site":"www.baidu.com","name":"百度","num":"5"}
当第一个文档插入时,集合就会被创建。
合法的集合名:
- 集合名不能是空字符串;
- 集合名不能有\0(空字符)
- 集合不能以"system"开头,这是为系统集合保留的前缀
- 用户创建集合不能含有保留字。
db.col.findOne()
capped collections
Capped collections就是固定大小的collection 它有很高的性能以及队列过期的特性(过期按照插入的顺序)capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能和标准的collection不同,你必须要显式创建一个capped collection,指定一个collection的大小,单位是字节。collection的数据存储空间值是提前分配的。
要注意的是指定的存储大小包含了数据库的信息:
db.createCollection("mycoll",{capped:true,size:1000000})
- 在capped collection中,你能添加新的对象
- 能进行更新,对象不会增加存储空间。如果增加,更新就会失败
- 数据库不允许进行删除。使用drop()方法删除collection所有的行
- 注意:删除之后,你必须显式的重新创建这个collection
- 在32bit机器中,capped collection最大的存储为1e9(1*10^9)
数据库的信息存储在集合中。它们使用了系统的命名空间。
dbname.sysytem.*
在MongoDB数据库命名空间<dbname>.sysytem.*是包含多种系统信息的特殊集合(collection),如下:
dbname.system.namespaces 列出所有名字的空间
dbname.system.indexes 列出所有索引
dbname.system.profile 包含数据库概要信息
dbname.system.users 列出所有可访问数据库的用户
dbname.local.sources 包含复制对端的服务器信息和状态
MongoDB数据类型
String 字符串。存储数据常用的数据类型。在mongoDB中,UTF-8编码的字符串才是合法的
Integer 整型数值。用于存储数值,根据你所采用的服务器,可分为32位和64位
Boolean 布尔值
Double 双精度浮点值
Min/Max keys 将一个值与BSON(二进制的JSON)元素的最低值和最高值相对比
Arrays 用于将数组或列表或多个值存储为一个键
Timestamp 时间戳。记录文档修改或添加的具体时间
Object 用于内嵌文档
Null 用于创建空值
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般采用特殊符号类型的语言
Date 日期时间
Object ID 对象ID 用于创建文档的ID
Binary Date 二进制数据,用于存储二进制数据
Code 代码类型,用于在文档中存储JavaScript代码
Regular expression 正则表达式类型,用于存储正则表达式