MongoDB(芒果数据库)
数据存储阶段
文件管理阶段(.txt .doc .xls)
优点:数据便于长期保存
数据可以大量存储
使用简单
缺点:数据的存储结构比较随意
数据的查找修改效率低
不方便扩展和程序调用
数据库管理阶段
优点:数据格式化存储,便于操作
降低了数据的冗余,提高了正删改查的效率
方便程序调用和扩展
缺点:使用上往往需要特定的语句或操作,相对复杂
几个概念:
数据:能够输入到计算机中并被识别处理的信息集合
数据结构:研究一个数据集合中,数据之间关系的学科
数据库:按照数据结构,存储管理数据的仓库,数据库是在数据库管理系统管理和
控制下在一定介质上存储的数据集合
数据库管理系统:数据库管理软件,用于维护建立数据库
数据库系统:由数据库和数据库管理系统等开发工具组成的集合
关系型数据库
采用关系模型来组织数据结构的数据库(二维表)
e.g. Oracle DB2 SQLServer Mysql Sqlite
优点:容易理解,逻辑类型常见的表格
使用方便,都使用sql语句进行数据操作,sql语句很成熟
数据的一致性高,冗余低,完整性好
技术成熟.可以使用表关联等复杂的操作
缺点:每次数据操作都需要sql解析,消耗较大
关系型数据库内部操作往往需要加锁,也影响了处理速度
不能很好的处理海量数据的高并发需求,读写能力差
由于数据的一致性等规定,灵活性也不高
非关系型数据库(NoSql ---> Not Only Sql)
优点:并发能力强,读写速度快,可以更好的应对海量数据并发需求
普遍比较灵活,容易拓展,弱化了数据的一致性
缺点:通用性差,没有像sql那样一致的语句操作
灵活性强会导致一定的操作混乱
技术成熟比关系型数据库要差
NoSql 使用情况
1.对数据一致性要求较低
2.应对数据高并发存储的可能性较大
3.比较容易建立非关系型数据库模型
NoSql 分类
键值型数据库:Redis
列存储数据库:HBase
文档型数据库:MongoDB
图形数据库
MongoDB(非关系型,文档型数据库)
特点:
1.由c++编写的数据管理系统
2.支持丰富的增删改查操作
3.有丰富的存储类型,技术相对成熟
4.支持众多的编程语言操作
5.使用方便,便于扩展和部署
MongoDB 安装
linux: sudo apt-get install mongodb
安装位置: /var/lib/mongodb
配置文件: /etc/mongodb.conf
命令集: /user/bin
手动安装:
1. www.mongodb.com 下载对应系统的安装包
2.将压缩包解压到一个目录下 /user/local
3.进入解压后的文件夹目录,里面的bin目录即命令集所在目录,将这个目录(bin)路径加入环境变量即可
环境变量:
PATH = $PATH:/opt/mongodb/bin
export PATH
如果不想每次启动都执行,将以上两句写入主目录
.bashrc中
mongodb 命令:
1.设置数据库的存储位置: mongod --dbpath 目录
e.g. 将database 设置为数据库存储目录
mongod --dbpath database
设置数据库连接端口:
mongod --port port
*如果不设置默认端口为 270017
启动mongodb操作界面(mongo shell) :mongo
退出该界面 ctrl-c 或者quit()
mongodb数据库结构
键值对 -->> 文档 -->> 集合 -->> 数据库
-----------------------------
| ID | NAME | AGE |
-----------------------------
| 1 | Lily |u
-----------------------------
| 2 | Lucy | 17 |
-----------------------------
{'_id':1,'NAME':'Lily',"AGE":18},{'_id':2,'NAME':'LUCy',"AGE":17}
Mysql mongodb 含义
--------------------------------------
database database 数据库
table collection 表/集合
column field 字段/域
row document 记录
index index 索引
创建数据库
use database
e.g. 创建一个叫stu的数据库
use stu
*use 实际是选择使用哪个数据库,当这个数据库不存在时会自动新环境这个数据库
*使用use创建数据库,并不会马上建立起来,而是需要真正插入数据时才会产生
查看数据库:show dbs
数据库命名规则:
1.使用utf-8字符
2.不能含有 空格 . / \ '\0' 字符
3.长度不超过64字节
4.不要和系统数据库重名
全局变量db : db变量代表当前正在使用的数据库
*如果不选择任何数据库,db为test
删除数据库: db.dropDatabase() 删除db代表的数据库
数据库的备份和恢复
备份数据库: mongodump -h dbhost -d dbname -o dir
备份本机中stu数据库到当前目录
mongodump -h 127.0.0.1 -d stu -o .
数据库文件恢复: mongorestore -h dbhost:port -d dbname path
e.g. 获取数据 到本机 student数据库中 从stu
mongorestore -h 127.0.0.1:27017 -d students ./stu
数据库监控命令
mongostat 查看数据库运行状态
insert query update delete :每秒执行增查改删的次数
command : 每秒执行mongo命令次数
flushes : 和磁盘交互情况
vsize res :使用虚拟内存和物理内存的情况
time : 运行时间
mongotop :检测内个数据库中数据表的读写情况
ns :数据集合
total :总时长
read :读时长
write :写时长
创建集合
方法1: db.createCollection(collection)
e.g. 创建集合class1
db.createCollection('class1')
方法2: 当插入数据时,需要指定集合,此时如果集合不存在则自动创建
e.g. 插入数据时class2不存在自动创建这个集合
db.class2.insert({'name':'王八蛋','age':35,'sex':'m'})
查看数据库中集合 : show collections
show tables
集合命名规则:
1.使用utf-8字符
2.不能含有 \0 字符
3.不要以system.开头,这是系统集合默认开头
4.不要和关键重复
删除集合:
db.collection.drop()
e.g. 删除数据库中class集合
db.class.drop()
集合重命名:
db.collection.renameCollection('new_name')
将集合class重命名为class0
db.class.renameCollction('class0')
文档:
1.文档是mongodb数据库中基本的数据组成形式类似字典
2.文档由键值对构成,每个键值对表达一个数据项
3.mongodb文档属于bson类型数据
4.文档中的键值对是有序的
键:即文档的域,表达值是什么内容
键的命名规则
1.使用utf-8字符串
2.不能使用\0
3.一个文档中的键不能重复
值:即数据库存储的数据
类型 值
数字 整数 小数
布尔类型
true false
Array 数组
database 日期时间
Timestamp 时间戳
String 字符串
Binary data 二进制字符串
Null 空 null
Object 内部文档(对象)
regex 正则表达式
code 代码
ObjectID ObjectID字串
ObjectID类型
"_id" : ObjectId("5bd13b9e842ebe76eb092645")
_id: 当插入mongodb文档时会自动生成_id域作为主键id
值 : ObjectID数据,为了和其他的值不重复
24位16进制编码
8位文档创建时间 6位机器ID 4位进程id 6位计数器
集合中的文档
1.每个集合中的文档格式可以不同
2.一个集合中存储的数据尽量体现相同的内容
3.文档的表达尽量层次不要太多
插入文档
插入单个文档: db.collection,insertOne()
功能:插入一条文档
参数:要插入的文档
向class0中插入一条文档
db.class0.insertOne({'name':'Lucy','age':17,'sex':'w'})
1.db.class.find() 查看插入结果
2.数据操作时,键可以不加引号
3.可以自己添加_id域,但是_id域的值不能重复
4.一个集合中插入的文档是有序的,
插入多条文档: db.collection.insertMany([{},{},{}...])
功能:插入多个文档
参数:数组中包含多个文档
向class2中插入多个文档
db.class2.insertMany([{name:'王八蛋',age:28,sex:'w'},{name:'张无忌',age:18,sex:'m'}])
插入文档: db.collection.insert()
功能:等于 insertOne + insertMany
db.class0.insert([{name:'猴子',age:55,sex:'w'},{name:'萧熏儿',age:18,sex:'w'}])
save插入文档
db.collection.save()
功能:插入文档 用法同insert
参数:与insert 相同,可以插入一条或多条文档
db.class1.save([{name:"古灵冷火",age:18,sex:'m'},{name:'青莲地心火火',age:20,sex:'w'}])
如果要插入的文档_id已经存在则会替换掉原有文档内容
获取集合对象
db.getCollection(collection_name)
功能:获取到集合对象,等同于db.collection
e.g.
db.getCollection('class0') <<===>> db.class0
查找操作
mysql: select ... from table where...
mongo: db.collection.find(query,field)
查找集合中所有内容:
db.collection.find()--> select * from table
find(query,field)
功能:查找所有符合条件的文档
参数:query : 表示筛选条件,是一个键值对文档,默认表示查找所有内容
e.g. 筛选所有年龄为17的文档
db.class1.find({age:17})
field :表示查找的域,是一个键值对文档,用0表示不查找某个域,1表示查找某个域
db.class0.find({},sex:0) --->> 不查找sex域
db.class0.find({},name:1,age:1) --->> 查找name,age域
不查找_id域,只查找name域内容
db.class0.find({},{_id:0,name:1})
1.当某个普通域设置为0时,表示该域不查找,其他的域查找,如果设置为1则表示该域查找,其他的不查找
2.对于普通域在表达式值0和1不能在参数中同时出现
3._id域比较特殊,如果不想查必须明确_id:0
findOne(query,field)
功能:查找第一条符合条件的文档
参数:使用同find
db.class0.findOne({age:17}.{_id:0})
作业:1.总结关系型数据库和非关系型数据库的区别
2.复习数据库创建,集合操作,数据插入方法
Mongodb--day01
最新推荐文章于 2024-02-26 15:49:01 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)