1、关系型数据库
- Mysql、Oracle、SqlServer、Access…
- SQL(结构化查询语言)
- 缺陷:
- 存储在硬盘上,读写慢(非关系可以存储在内存中)
- 保持ACID难扩展(关系型数据库需要维护事务,难扩展)
2、非关系型数据库
- Nosql (Not Only SQL)
- key: value
- CAP -> BASE
- 一致性:所有节点在同一时间具有相同的数据
- 可用性:保证每个请求不管成功或者失败都有响应
- 分隔容忍:系统中任意信息的丢失或者失败不会影响系统的继续运作
- 以上原则使用时,不能同时使用三个,两个可以同时使用
- 缺点
- 没有标准化
- 有限的查询功能(到目前为止)
3、MongoDB
- 非关系型数据库 nosql
- 文档存储:类json格式
- 有机会对字段建立索引,实现关系型数据库
- docker安装
- docker exec -it mongodb bash
- mongo // 进入mongo
- 数据库操作
- 查看当前的数据库:
show dbs
- 切换数据库(如果没有会自动创建):
use demo1
- 往数据库中插入一条数据:
db.demo1.insert({"name":"小红"})
- 删除数据库:
db.dropDatabase()
- 集合操作
- 集合相当于一张表
- 集合可以有多个文档
- 创建集合
db.createCollection('collection1')
- 查看已经创建的集合
show collections
- 删除集合
db.collection1.drop()
- 插入和查看文档
- 插入文档
- 文档是mongodb中的基本单元
- 相当于表中的一条记录
- 以json格式显示
- 插入文档时,MingoDB自动创建集合
db.collectionDemo.insert({"name":"hello"})
// 没有的话 自动创建- 查看插入的内容
db.collectionDemo.find().pretty()
// pretty是为了美观- 插入复杂的文档
"# 声明变量,插入文档
document=({
title: ‘MongoDB’,
by: ‘RuotongYu’,
tags: [‘mongodb’, ‘database’, ‘NoSQL’],
})
db.collectionDemo.insert(document)
3.1 条件查询
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {< key>: < value>} | db.col.find({“by”:2}).pretty() | where by = ‘2’ |
小于 | {< key>: { $lt: < value>}} | db.col.find({“like”:{$lt:50}}).pretty() | where like < 50 |
小于或等于 | {< key>: { $lte: < value>}} | db.col.find({“like”:{$lte:50}}).pretty() | where like <= 50 |
大于 | {< key>: { $gt: < value>}} | db.col.find({“like”:{$gt:50}}).pretty() | where like > 50 |
大于或等于 | {< key>: { $gte: < value>}} | db.col.find({“like”:{$gte:50}}).pretty() | where like >= 50 |
不等于 | {< key>: { $ne: < value>}} | db.col.find({“like”:{$ne:50}}).pretty() | where like != 50 |
3.2 修改文档
db.collection.update(
<query>,
<update>, // !!!注:update是替换,没有修改的字段会消失
// 可选项
{
upsert: <boolean>, // 如果不存在update的记录,是否插入,默认false
multi: <boolean>, // 把按条件查出来多条记录全部更新,默认false, 只替换一条记录
writeConcern: <document> // 抛出异常的级别
}
)
- 修改文档
- db.col.update({‘title’: ‘MongoDB’},{‘title’:‘MongoDB123’}) // 只会修改一个
- 修改多个文档
- db.col.update({‘name’: ‘hello’}, {$set:{‘name’:‘hello123’}},{multi:true})
3.3 删除文档
- 删除多个文档
- db.col.remove({‘name’: ‘hello123’})
- db.col.remove({“name”:“hello”}, 1)
3.3 修改操作符 inc
- 用法:{$inc:{field:value}}
- 作用:对一个数字字段的某个field增加value
- 示例:将name为xiaohong的学生age增加5
- db.students.update({name:“xioahong”},{$inc:{age:5}})
3.4 修改操作符 $set
- 用法:{$set:{field:value}}
- 作用:将文档中某个字段field的值设为value
- 示例:把xiaohong的年龄设为10岁
- db.students.update({name:“xiaohong”},{$set:{age:10}}) // 多处更新
3.5 修改操作符 $unset
- 用法:{$unset:{field:1}}
- 作用:删除某个字段field
- 示例:将chenzhou的年龄字段删除
- db.students.update({name:“chenzhou”},{$unset:{age:1}})
3.6 修改操作符 $push
- 用法: {$push:{field:value}}
- 作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型
- 示例:给chenzhou添加别名"michael"
- db.students.update({name:“zhenzhou”},{$push:{“ailes”:“Michael”}})
3.7 修改运算符 $rename
- 用法:{$rename:{old_field_name:new_field_name}}
- 作用:对字段进行重命名
- 示例:把xiaohong记录的name字段重命名hello
- db.students.update({name:“xiaohong”},{$rename:{“name”:“name2”}})