什么是MongoDB ?
#MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。
#MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
#MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
简介
MongoDB 是一个基于分布式 文件存储的NoSQL数据库
由C++语言编写,运行稳定,性能高
旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
查看官方网站
MongoDB特点
模式自由 :可以把不同结构的文档存储在同一个数据库里
面向集合的存储:适合存储 JSON风格文件的形式
完整的索引支持:对任何属性可索引
复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
基本操作
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成
MongoDB文档类似于JSON对象,字段值可以包含其他文档、数组、文档数组
安装管理mongodb环境
完成数据库、集合的管理
数据的增加、修改、删除、查询
三元素: 数据库、集合、文档
数据库是一个集合的物理容器
集合就是关系数据库中的表
文档对应着关系数据库中的行
文档,就是一个对象,由键值对构成,是json的扩展Bson形式 {‘name’:‘guojing’,‘gender’:'男’}
集合:类似于关系数据库中的表,储存多个文档,结构不固定,如可以存储如下文档在一个集合中 {‘name’:‘guojing’,‘gender’:‘男’} {‘name’:‘huangrong’,‘age’:18} {‘book’:‘shuihuzhuan’,‘heros’:'108’}
一个mongodb中可以建立多个数据库
数据库:是一个集合的物理容器,一个数据库中可以包含多个集合
1.不能是空字符串("")。
2.不得含有’ '(空格)、.、$、/、\和\0 (空宇符)。
3.应全部小写。
4.最多64字节
集合:集合中可以存储多个文档
1.集合名不能是空字符串""。
2.集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
3.集合名不能以"system."开头,这是为系统集合保留的前缀。
4.用户创建的集合名字不能含有保留字
符。有些驱动程序的确支持在集合名里面包
含,这是因为某些系统生成的集合中包含该
字符。除非你要访问这种系统创建的集合,
否则千万不要在名字里出现$。
文档:就是一个对象,由键值对构成,是json的扩展Bson(可以理解为在JSON的基础上添加了一些json中没有的数据类型)形式。
需要注意的是:
1.文档中的键/值对是有序的。
2.文档中的值不仅可以是在双引号里
面的字符串,还可以是其他几种数据类
型(甚至可以是整个嵌入的文档)。
3.MongoDB区分类型和大小写。
4.MongoDB的文档不能有重复的键。
5.文档的键是字符串。除了少数例外
情况,键可以使用任意UTF-8字符。
文档键命名规范:
1.键不能含有\0 (空字符)。这个字符用来表示键的结尾。
2. .和$有特别的意义,只有在特定环境下才能使用。
关于mongodb 的安装与启动
安装
方式一: MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装最新的可靠版。
1.sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
如果是16.04执行下面这条操作
2.echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
如果是18.04执行下面这条操作
echo “deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
3.sudo apt-get update
4.sudo apt-get install -y mongodb-org
安装完成后,在终端输入以下命令查看MongoDB版本: mongo -version 一般安装成功后会显示为4.0.1版本 MongoDB shell version v4.0.1
方式二: 根据官网指定步骤安装: https://www.mongodb.org/downloads
1.使用下载包手动安装:
sudo apt-get install libcurl3 openssl
2.下载安装包: https://www.mongodb.com/download-center#production https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.0.1.tgz
3.解压也可以手动解压(解压后可以起个端点的名称)
tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.0.1.tgz
4.进入加压后文件存放的目录,然后将mongodb移动到/usr/local/目录下
sudo mv mongodb-linux-x86_64-ubuntu1604-4.0.1/ /usr/local/mongodb
5.将可执行文件添加到PATH路径中,自己的环境配置文件中添加此路径
sudo vim .bashrc
export PATH=/usr/local/mongodb/bin:$PATH
退出并保存
source .bashrc 激活配置文件
安装完成后,在终端输入以下命令查看MongoDB版本: mongo -version 一般安装成功后会显示为4.0.1版本 MongoDB shell version v4.0.1
管理mongo
配置文件在/etc/mongod.conf
默认端口27017
启动mongodb 服务
sudo service mongod start
停止,停止后输入将不能启动shell
sudo service mongod stop
重置服务
sudo service mongod restop
启动mongodb客户端
mongo
终端退出连接
exit
或ctrl+c
卸载mongodb数据库
删除 MongoDB 包
sudo apt-get purge mongodb-org
删除 MongoDB 数据库和日志文件
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
mongodb数据库 集合 及相关操作
数据库基本命令:
启动数据库
sudo service mongod start
#在输入并进入数据库
mongo
查看当前数据库
db;
查看所有数据库
show dbs;
切换数据库
use 数据库名;
查看当前数据库信息
db.stats()
db:当前数据库的名字。
collections:当前数据库的集合数。
objects:当前数据库所有集合总所包含的对象(即文档)的数量。
avgObjSize:每个文档的平均大小(以字节为单位)。
dataSize:此数据库中保存的未压缩数据的总大小,不是指占有磁盘大小,单位是bytes。
storageSize:分配给此数据库的集合用于存储文档的空间总量,也就是当前数据库占有磁盘大小,单位是bytes。
numExtents:当前数据库所有集合包含的扩展数量的统计。
indexes:数据库中包含的所有集合的索引总数,也就是system.indexes表数据行数。
indexSize:此数据库上创建的所有索引的总大小,单位是bytes。
数据库删除:删除当前指向的数据库,如果数据库不存在,则什么也不做
db.dropDatabase()
集合的相关操作
例1:不限制集合大小
db.createCollection("stu")
例2:限制集合大小,后面学会插入语句后可以查看效果
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
db.createCollection("sub", { capped : true, size : 10 } )
例3:创建固定集合 sub,整个集合空间大小 6142 KB, 文档最大个数为 100 个。
db.createCollection("sub", { capped : true, size : 10 ,max:100} )
查看当前数据库所有集合
show collections:当前数据库的集合数。
语法: db.集合名称.find()
db.stu.find()
删除集合
语法格式:
db.集合名称.drop() 如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false
数据的 增,删,改,查操作
文档 文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
RDBMS MongoDB
数据库 数据库
表格 集合
行 文档
列 字段
表联合 嵌入文档
主键 主键 (MongoDB 提供了 key 为 _id )
MongoDB 数据类型 下表为MongoDB中常用的几种数据类型。
数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Array 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于嵌入式的文档,即一个值为一个文档
Null 用于创建空值。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
插入文档
db.集合名称.insert({键:值})
注意:插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId
指定 _id插入
db.stu.insert({_id:'20180819',name:'郑程峰2',gender:1})
多条插入: 括号方法 ([{}]) 多条要加入一对[]
db.stu.insert([{name:'王明',gender:1},{name:'王玲玲',gender:0}])
指定单词方法插入 insertOne代表插入一条 insertMany代表插入多条
db.集合名称.insertOne(document) db.集合名称.insertMany(document)
查询全部文档
语法: db.集合名称.find()
db.文档名.find()
更新文档
MongoDB 使用 update() 和 save() 方法来更新集合中的文档。两个函数是有区别的。
update() 方法
update() 方法用于更新已存在的文档
db.collection.update(
,
,
{
upsert: ,
multi: ,
}
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如
,
,
,inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
全文档更新
db.集合名.update(找到指定{name:'xxxxx'},并更新新的{name:'张xxx'})
指定属性更新,通过操作符$set
db.集合名.update({name:'李自成'},{$set:{name:'闯王李自成'}})
指定属性通过操作符$set更新多条
db.集合名.update({name:'小花'},{$set:{name:'小白'}},{multi:true})