简介
MongoDB 是一个基于分布式文件存储的NoSQL数据库
由C++语言编写,运行稳定,性能高
旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
MongoDB特点
模式自由 :可以把不同结构的文档存储在同一个数据库里
面向集合的存储:适合存储 JSON风格文件的形式
完整的索引支持:对任何属性可索引
复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
基本操作
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成
MongoDB文档类似于JSON对象,字段值可以包含其他文档、数组、文档数组
安装管理mongodb环境
完成数据库、集合的管理
数据的增加、修改、删除、查询
名词
SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase
数据库
tablecollection
数据库表/集合
rowdocument
数据记录行/文档
columnfield
数据字段/域
indexindex
索引
table joins
表连接,MongoDB不支持
primary keyprimary key
主键,MongoDB自动将_id字段设置为主键
三元素:数据库,集合,文档
集合就是关系数据库中的表
文档对应着关系数据库中的行
文档,就是一个对象,由键值对构成,是json的扩展Bson形式
{'name':'guojing','gender':'男'}
集合:类似于关系数据库中的表,储存多个文档,结构不固定,如可以存储如下文档在一个集合中
{'name':'guojing','gender':'男'}
{'name':'huangrong','age':18}
{'book':'shuihuzhuan','heros':'108'}
数据库:是一个集合的物理容器,一个数据库中可以包含多个文档
一个服务器通常有多个数据库
安装
32bit的mongodb最大只能存放2G的数据,64bit就没有限制
解压
tar -zxvf mongodb-linux-x86_64-ubuntu1604-3.4.0.tgz
移动到/usr/local/目录下
sudo mv -r mongodb-linux-x86_64-ubuntu1604-3.4.0/ /usr/local/mongodb
将可执行文件添加到PATH路径中
export PATH=/usr/local/mongodb/bin:$PATH
管理mongo
配置文件在/etc/mongod.conf
默认端口27017
启动
sudo service mongod start
停止
sudo service mongod stop
使用终端连接
这个shell就是mongodb的客户端,同时也是一个js的编译器
mongo
命令
db
查看当前数据库名称
db.stats()
查看当前数据库信息
终端退出连接
exit
或ctrl+c
GUI:robomongo,解压后在bin目录下找到运行程序
数据库切换
查看当前数据库名称
db
查看所有数据库名称
列出所有在物理上存在的数据库
show dbs
切换数据库
如果数据库不存在,则指向数据库,但不创建,直到插入数据或创建集合时数据库才被创建
use 数据库名称
默认的数据库为test,如果你没有创建新的数据库,集合将存放在test数据库中
数据库删除
删除当前指向的数据库
如果数据库不存在,则什么也不做
db.dropDatabase()
集合创建
语法
db.createCollection(name, options)
name是要创建的集合的名称
options是一个文档,用于指定集合的配置
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
db.createCollection("sub", { capped : true, size : 10 } )
查看当前数据库的集合
语法
show collections
删除
语法
db.集合名称.drop()
数据类型
下表为MongoDB中常用的几种数据类型:
Object ID:文档ID
String:字符串,最常用,必须是有效的UTF-8
Boolean:存储一个布尔值,true或false
Integer:整数可以是32位或64位,这取决于服务器
Double:存储浮点值
Arrays:数组或列表,多个值存储到一个键
Object:用于嵌入式的文档,即一个值为一个文档
Null:存储Null值
Timestamp:时间戳
Date:存储当前日期或时间的UNIX时间格式
object id
每个文档都有一个属性,为_id,保证每个文档的唯一性
可以自己去设置_id插入文档
如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为objectID
objectID是一个12字节的十六进制数
前4个字节为当前时间戳
接下来3个字节的机器ID
接下来的2个字节中MongoDB的服务进程id
最后3个字节是简单的增量值
插入
语法
db.集合名称.insert(document)
插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId