手把手教你 MongoDB 的安装与详细使用(二)

2018-01-31 10:57:32来源:https://mp.weixin.qq.com/s?__biz=MzA3MTUzOTcxOQ==&mi作者:人点击

分享

上一篇文章练习了,MongoDB 的以下操作


安装 MongoDB 服务


连接 MongoDB


MongoDB 创建数据库


MongoDB 删除数据库


MongoDB 插入文档


MongoDB 删除文档


MongoDB 查询文档


MongoDB AND 条件


MongoDB OR 条件


MongoDB AND 和 OR 联合使用


MongoDB 条件操作符


MongoDB (>) 大于操作符 - $gt


MongoDB(>=)大于等于操作符 - $gte


MongoDB (<) 小于操作符 - $lt


MongoDB (<=) 小于操作符 - $lte


MongoDB 使用 (<) 和 (>) 查询 - $lt 和 $gt


手把手教你 MongoDB 的安装与详细使用(一)


http://www.ymq.io/2018/01/26/MongoDB-1/


接下来继续


MongoDB Limit与Skip方法


MongoDB 排序


MongoDB 索引


MongoDB 聚合


MongoDB 主从复制(副本集)


MongoDB 自动故障转移


1. MongoDB Limit与Skip方法
Limit() 方法
MongoDB Limit() 方法

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。


插入测试数据


语法


limit()方法基本语法如下所示:


以上实例为显示查询文档中的两条记录:


注:如果你们没有指定limit()方法中的参数则显示集合中的所有数据。


Skip() 方法

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。 语法


skip() 方法脚本语法格式如下:


实例


以上实例只会显示第二条文档数据


注:skip()方法默认参数为 0


2. MongoDB 排序
MongoDB sort()方法

在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段


使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。


语法


sort()方法基本语法如下所示:


col 集合中的数据如下:


其中 1 为升序排列,而-1是用于降序排列


以下实例演示了 col 集合中的数据按字段 title 的降序排列:


注: 如果没有指定sort()方法的排序方式,默认按照文档的升序排列。


3. MongoDB 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。


这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。


索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构


ensureIndex() 方法

MongoDB使用 ensureIndex() 方法来创建索引。


语法


ensureIndex()方法基本语法格式如下所示:


语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。


实例


语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。


实例


ensureIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。


ensureIndex() 接收可选参数,可选参数列表如下:



实例


在后台创建索引:


建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。


4. MongoDB 聚合

MongoDB 聚合


MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。


aggregate() 方法

删除之前的测试数据


插入新的测试数据


MongoDB中聚合的方法使用aggregate()。


语法


aggregate() 方法的基本语法格式如下所示:



以上实例类似sql语句: selectby_user,count(*)fromcolgroupbyby_user


在上面的例子中,我们通过字段by user字段对数据进行分组,并计算by user字段相同值的总和。


下表展示了一些聚合的表达式:



管道的概念

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。


MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。


表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。


这里我们介绍一下聚合框架中常用的几个操作:


$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。


$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。


$limit:用来限制MongoDB聚合管道返回的文档数。


$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。


$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。


$group:将集合中的文档分组,可用于统计结果。


$sort:将输入文档排序后输出。


$geoNear:输出接近某一地理位置的有序文档。


管道操作符实例
1、$project实例

这样的话结果中就只还有 id,tilte和by user三个字段了,默认情况下 id字段是被包含的,如果要想不包含 id话可以这样:


2.$match实例

$match用于获取 likes 大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。


以上实例类似sql语句:


按日、按月、按年、按周、按小时、按分钟聚合操作如下:


时间关键字如下:

$dayOfYear: 返回该日期是这一年的第几天(全年 366 天)。


$dayOfMonth: 返回该日期是这一个月的第几天(1到31)。


$dayOfWeek: 返回的是这个周的星期几(1:星期日,7:星期六)。


$year: 返回该日期的年份部分。


$month: 返回该日期的月份部分( 1 到 12)。


$week: 返回该日期是所在年的第几个星期( 0 到 53)。


$hour: 返回该日期的小时部分。


$minute: 返回该日期的分钟部分。


$second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒)。


$millisecond:返回该日期的毫秒部分( 0 到 999)。


$dateToString: { $dateToString: { format: , date: } }。


5. MongoDB 主从复制(副本集)

MongoDB复制是将数据同步在多个服务器的过程。


复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。


复制还允许您从硬件故障和服务中断中恢复数据。


官方文档https://docs.mongodb.com/manual/replication/


5.1 什么是复制?

保障数据的安全性


数据高可用性 (24*7)


灾难恢复


无需停机维护(如备份,重建索引,压缩)


分布式读取数据


5.2 MongoDB复制原理

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。


mongodb各个节点常见的搭配方式为:一主一从、一主多从。


主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。


MongoDB复制结构图如下所示:



以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。


5.3 副本集特征

N 个节点的集群


任何节点可作为主节点


所有写入操作都在主节点上


自动故障转移


自动恢复


5.4 MongoDB副本集设置
1、关闭正在运行的MongoDB服务器。
2.节点建点

首先需要去你选择的mongodb数据文件存放的文件夹新建三个数据库,用来模拟三台不通的机器,博主的路径如下


3.启动三个数据库(dbpath),并且端口(--port 1000x),集群名称(--replSet gabriel),关闭日志选项(--nojournal),守护进程方式启动,会自动拉起(--fork),日志目录(--logpath)
4.顺便连接一个服务器,做初始化操作,这里博主连入10001端口

终端下进入


进入后输入初始化方法


收到如下信息就成功了。


此时会发现终端上的输出已经有了变化。


5.查询状态

在返回中,参数set后面为集群名称,每个members下面可以看到他们各自的情况,其中stateStr是角色,主节点为(PRIMARY)。


6.进入主节点插入数据,进入从节点查看数据

博主主节点在10001接口


插入数据


博主切换从节点10002


切换到从节点,你会发现使用show dbs 会报错,是因为还没有开启权限,输入rs.slaveOk();就可以顺利访问了。


再次查看


切到test 库,查看数据已经同步过来了


以上就是简单的主从复制建立过程,现在已经可以在从服务器看到主服务器插入的数据了。


切换从节点10003 一样的问题


删除从节点

关闭主服务器后,再重新启动,会发现原来的从服务器变为了从服务器,新启动的服务器(原来的从服务器)变为了从服务器


6. MongoDB 自动故障转移

首先通过 rs.status() 查看,可以看到主节点是10001,主节点 "name":"localhost:10001","stateStr":"PRIMARY" 接下来停止 10001 主节点,测试故障切换


连接到主节点


关闭主节点


显示所有数据库


切换到admin


停止数据库,必须进入 admin 库


响应


查看是否真的停止了,发现已经没有10001 节点进程了


查看是否故障专业

查看主从状态


发现 "name" : "localhost:10001","stateStr" : "(not reachable/healthy)", 健康状态已经是“无法访问状态了”


主节点已经切换成 10003 节点了

重启节点10001


参考:

Runoob 教程:http://www.runoob.com/mongodb/mongodb-tutorial.html


Tutorials 教程:Pointhttps://www.tutorialspoint.com/mongodb/mongodb_advantages.htm


MongoDB 官网地址:https://www.mongodb.com


MongoDB 官方英文文档:https://docs.mongodb.com/manual


MongoDB 各平台下载地址:https://www.mongodb.com/download-center#community


MongoDB 安装 https://docs.mongodb.com/manual/tutorial/install-mongodb-enterprise-on-ubuntu


Contact

作者:鹏磊


出处:http://www.ymq.io/2018/01/29/MongoDB-2


Email:admin@souyunku.com


版权归作者所有,转载请注明出处


Wechat:关注公众号,搜云库,专注于开发技术的研究与知识分享



最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台