这是我参与「第四届青训营 」笔记创作活动的的第27天,今天主要记录前端进阶必须掌握内容Mongodb数据库,从搭建环境到运行数据库,然后使用MongodB;
一、文章内容
- 数据库基础知识
- 关系型数据库和非关系型数据库
- 为什么学习Mongodb数据库
- 环境搭建及运行Mongodb
- Mongodb命令之增删改查
二、数据库的基本知识
简单认识数据库
数据库说白了就是一个文件,不通的数据库有不同的存储方式,但最后归根结底都是一个文件存储在磁盘里,当然也有存储在内存中的数据库比如:redis,其次数据库文件都可以有多个数据库,一个数据库又可以有多个表(sql关系型数据库)或者一个数据库可以有多个集合(nosql非关系型数据库).
数据库的主要职责
数据库就是存储数据的.见名知意数据的仓库就是存放各种数据的仓库,视频、声音、图片等资源,一般关系型数据库存放的数据关联性很强,非关系型数据库存放的数据关联性较弱.
数据库主要功能
- 增加数据
- 删除数据
- 更新数据
- 查询数据
三、关系型数据库和非关系型数据库
关系型数据库有(sql):mysq/sql/ oracle/sqlite,非关系型数据库(nosql):redis / hbase /mongoDB /CouchDB.今天我们要学习的就是Mongodb.
sql和nosql的区别
-
sql存储是关系型数据,数据均有结构,但是nosql既可以存储有结构数据也可存储无结构数据,比较灵活.
-
sql是行和列组成,nosql存储是类似json数据那样.
分布式计算的优点
可靠性(容错) :
分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。
可扩展性:
在分布式计算系统可以根据需要增加更多的机器。
资源共享:
共享数据是必不可少的应用,如银行,预订系统。
灵活性:
由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。
更快的速度:
分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。
开放系统:
由于它是开放的系统,本地或者远程都可以访问到该服务。
更高的性能:
相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。
如何选择用sql还是nosql
1)数据库表schema经常变化
2)数据库表字段是复杂数据类型
3)高并发数据库请求
4)海量数据的分布式存储
1)社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将
订单所有的变更读取出来。
4)物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
5)视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。
这些应用场景中,数据操作方面的共同特点是:
- 数据量大
- 写入操作频繁(读写都很频繁)
- 价值较低的数据,对事务性要求不高
对于这样的数据,我们更适合使用MongoDB来实现数据的存储。
应用不需要事务及复杂 join 支持
新应用,需求会变,数据模型无法确定,想快速迭代开发
应用需要2000-3000以上的读写QPS(更高也可以)
应用需要TB甚至 PB 级别数据存储
应用发展迅速,需要能快速水平扩展
应用要求存储的数据不丢失
应用需要99.999%高可用
应用需要大量的地理位置查询、文本查询
如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。
四、为什么学习Mongodb数据库
灵活高、支持并发、面向文档存储.
五、环境搭建及运行Mongodb
在官网下载对应的系统版本可以下载window也可下载linux,我下载的是linux.
下载地址:试用 MongoDB Atlas 产品|蒙戈德点击进去后选择社区版本free的,
然后在右侧选择自己的系统和版本,如图1所示.
图1 下载界面
然后打开终端在自己选定的目录下运行wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.0.tgz
下载,然后解压使用tar -zxvf mongodb-linux-x86_64-rhel70-6.0.0.tgz.
解压好之后进去mongodb-linux-x86_64-rhel70-6.0.0目录.找到bin目录进去,
创建俩个目录一个是data存放数据库,一个log存放日志执行下面的命令开启mongo服务
./mongod --dbpath 创建好的data目录绝对路径 --logpath 创建log文件夹绝对路径/mongod.log --bind_ip=0.0.0. --fork
bind_ip=0.0.0.0远程也可以链接.
fork是后台运行mongodb服务,没有报错说明成功开启,然后输入./mongo进入数据库,在这里可以随便操作数据库了.也可以算简单的加减法.
六、Mongodb命令之增删改查
使用mongodb不需要创建表格而是需要创建集合,其实集合也不需要我们创建,直接俄操作就好,不存在集合的话,系统会自动给我们创建好;
使用show dbs 查看数据库,user 数据库 可以进入数据库;然后开始增删改查操作.
增加数据
语法如下,括号里是类似对象的文档.还有save、insetOne、insetMany,insert,save被弃用.
db.集合名字.insert({name:'我是小学生'})
删除数据
语法如下第一个参数是条件找到就删除.
db.集合名字.remove({'title':'MongoDB 教程'})
更新数据
语法如下,第一个参数是条件,第二个参数是修改的内容键值对.
db.集合名字.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
查询数据
语法如下,第一个参数是查询的条件,找到就返回
db.集合名字.find({"by":"菜鸟教程", "title":"MongoDB 教程"})
七、总结用法
1.在Mongodb中我们插入数据使用的是insert函数,其中第一个参数是需要记录的数据,形式是bson,类似于json或者是JavaScript的对象,很容易理解.
2.我们在查询和修改以及删除都需要传入一个{}对象类型的条件,比如name:“zhangsan”,就是名字等于zhangsan的这个记录,很容易理解,跟sql里的where name =“zhangsan” 一样,在mongodb里:和sql里的=一样.还有一些逻辑表达式如下.
操作 | 语法 |
---|---|
等于 | db.集合名.find({“name”:“某某人”}) |
小于 | db.集合名.find({age:{$lt:18}}) |
大于 | db.集合名.find({age: {$gt:18}}) |
<= | db.集合名.find({age:{lte:18}}) |
>= | db.集合名.find({age:{$gte:18}}) |
!= | db.集合名.find({age:{$ne:22}}) |
当然还有or和and的操作,请看如图操作and且操作,or操作如图3所示.
图2 且查询
图3 或操作
总结且操作和或操作的语法:且就是在查询的find函数里第一个传入一个{}用逗号分隔查询的条件语句;
db.user.find({"字段1":VALUE , "字段2":VALUE })
如果是或操作就是这样的语法:
db.user.find({$or:[{"字段1":VALUE } ,{ "字段2":VALUE }]})
- 在查询时候find()可以传俩个函数第一个是条件,第二个参数是显示的字段,不填第二个参数就和sql里的*类似返回全部,如果要选择填写可以这样传参{“age”:1},只需要写显示的字段名,然后冒号1.
八、最后总结
通过本文可以简单的学习掌握基本的数据库知识和简单增删改查操作,如果有不懂的的地方欢迎留言,最后mongodb是前端必学的数据库.