Master:代表主节点,主节点提供所有数据的CRUD服务
Backup:代表从节点,从节点不提供任何服务
Arbitration:代表仲裁节点,仲裁节点不存储任何数据,客户点可以同时连接主节点和备份节点,但是不连接仲裁节点
我们在进行数据操作的时候,我们可以将增删改请求交给主节点,查询交给备份节点,这样减少主节点压力
原理图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7ce7b1714505450664d23e7c62026bf2.png#pic_center)
拉取MONGODB镜像
docker pull mongo
以挂载方式创建容器
##创建路径(依次创建四个文件夹,db,db_bk,db_arb,log)
mkdir /root/mongodb/db
mkdir /root/mongodb/db_bk
mkdir /root/mongodb/db_arb
mkdir /root/mongodb/log
##以挂载方式创建容器
docker run -d --name mongo_master -v /root/mongodb/db:/data/db -v /root/mongodb/log:/data/log/log.log -p 27017:27017 mongo --replSet mongo_clus
docker run -d --name mongo_bk -v /root/mongodb/db_bk:/data/db -v /root/mongodb/log:/data/log/log_bk.log -p 27018:27017 mongo --replSet mongo_clus
docker run -d --name mongo_arb -v /root/mongodb/db_arb:/data/db -v /root/mongodb/log:/data/log/log_arb.log -p 27019:27017 mongo --replSet mongo_clus
配置信息说明
replSet:设置集群名称
启动主节点容器
docker start mongo_master
进入容器
docker exec -it mongo_master bash
#进入mongo
mongo
创建集群
cfg={_id:"mongo_clus",members:[{_id:0,host:"192.168.250.127:27017",priority:2},{_id:1,host:"192.168.250.127:27018",priority:1},{_id:2,host:"192.168.250.127:27019",arbiterOnly:true}]}
rs.initiate(cfg)
配置信息说明
cfg:任意名字
_id:副本集名字
members:代表集群里面的节点
_id:节点唯一ID
host:节点地址
priority:优先等级,数值越大优先级越高,最高为主节点,其他为副本集
arbiterOnly:仲裁节点,必须设置,属性设置为true
查看集群状态
rs.status()
mongodb客户端连接工具
https://nosqlbooster.com/downloads
常用命令
显示数据库
show dbs
选择和创建数据库(如果数据库不存在则自动创建)
use 数据库名称
显示表(集合)
show collections
插入文档
db.集合名称.insert(数据)
查看表(集合)下的文档数据
db.集合名称.find()
按条件查询(参数为json)
db.集合名称.find(参数)
返回符合条件的第一条数据(参数为json)
db.集合名称.findOne(参数)
返回指定条数的记录
db.集合名称.find().limit(条数)
修改文档(条件和修改后的数据为json)
db.集合名称.update(条件,{$set:修改后的数据})
删除文档(条件为json)
db.集合名称.remove(条件)
删除全部文档,请慎用
db.集合名称.remove({})
统计条数
db.集合名称.count()
按条件统计条数(条件为json)
db.集合名称.count(条件)
聚合查询
db.集合名称.aggregate([
{管道:{表达式}}
....
])
常用管道:
$group 将集合中的文档分组,用于统计结果
$match 过滤数据,只要输出符合条件的文档
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$limit 限制集合数据返回文档数
常用表达式
$sum 总和 $sum:1同count表示统计
$avg 平均
$min 最小值
$max 最大值
mongodb失效的机制, 为集合创建一个indexes(索引)
db.集合名称.ensureIndex( { "Date": 1 }, { expireAfterSeconds: 10 } )
然后确保每次插入数据的时候有Date这列,mongodb将会自动为你删除该列
自定义自增列
function getNextSequenceValue(sequenceName){
var sequenceDocument = db.集合名称.findAndModify(
{
query:{_id: sequenceName },
update: {$inc:{sequence_value:1}},
"new":true
});
return sequenceDocument.sequence_value;
}
db.集合名称.insert({
"_id":getNextSequenceValue("productid"),
"product_name":"Apple iPhone",
"category":"mobiles"})