MongoDB学习笔记

MongoDB学习笔记

一 MongoDB的使用

1 启动

(1)在bin目录下打开命令行窗口,输入启动命令

mongod --dbpath=…\data\db #数据库存储位置

(2)使用配置文件启动
新建一个配置文件mongod.conf

storage:
	dbPath:D:\mongodb\data\db

启动命令:mongod -f …\conf\mongod.conf #配置文件的位置
linux下:/usr/local/mongodb/bin/mongod(bin路径) -f 配置文件的路径

2 连接

(1)使用shell命令

window下:mongo或mongo --host=127.0.0.1 --port=27017
linux下:/usr/local/mongodb/bin/mongod --host=127.0.0.1 --port=27017

(2)查看数据库

show databases

(3)退出

exit

3 基本常用命令

(1)选择和创建数据库

use 数据库名称

(2)查看当前正在使用的数据库命令

db

(3)数据库的删除

db.dropDatabase()

(4)集合的创建和删除
① 显式创建:

db.createCollection(“集合名称”)

② 删除

db,集合名称.drop()

(5)文档基本的CRUD
① 文档的插入

db.集合名.insert(json对象) #插入单条
db.集合名.insertMany([json对象组]) #插入多条记录

② 文档的查询

查询所有:db.集合名.find(“查询json条件”)
查询一条记录:db.集合名.findOne(“查询json条件”)
投影查询:db.集合名.find(“查询的条件”:{“显示字段,1显示,0不显示”})

③ 文档的更新

db.集合.update(query,update) #查询条件,更新
覆盖修改:只留下修改的字段,db.集合.update({条件},{更新字段})
局部修改:使用$set实现会显示其他字段,db.集合.update({条件},{ $set:{更新字段}})
批量修改:默认指修改第一条,db.集合.update({条件},{ $set:{更新字段}},{ $set:{更新字段}})
列值增长的修改:db.集合.update({条件},{ $inc:{更新字段}})

④ 文档的删除

条件删除:db.集合.remove({条件})
全部删除:db.集合.remove({})

⑤ 文档的计数

db.集合.count()

⑥ 文档的分页

db.集合.find().limit(每页个数)
第一页:db.集合.find().skip(0).limit(2),第二页:db.集合.find().skip(2).limit(2)

⑦ 排序查询

db.集合.find().sort({字段:1升序,-1降序})

(6)文档的复杂查询

模糊查询:db.集合.find(字段名:/正则表达式/})
条件比较运算:db.集合.find(字段名:{$gt:值}})
包含查询:db.集合.find(字段名:{ $ in或 $ nin:[值1,值2]})
条件连接查询:db.集合.find($and或 $or:[{条件1},{条件2}])

4 索引

(1)创建索引

单索引:db.集合.createIndex(keys),如 db.集合.createIndex({userid:1}),升序索引
复合索引:db.集合.createIndex(keys),如 db.集合.createIndex({userid:1},{lockno:-1})

(2)删除索引

指定索引的移除:db.集合.dropIndex({userid:1})
删除所有索引:db.集合.dropIndexes()

(3)查询索引

db.集合.getIndexes()

(4)索引的执行计划

db.集合.find(条件).explain()

二 MongoDB集群和安全

1 副本集的搭建

(1)创建主节点,副本节点和仲裁节点
在这里插入图片描述
① 分别给三个节点(三个端口)创建存放数据和日志的目录

mkdir -p /mongodb/replica_sets/myrs_27017(端口)/log \ &
mkdir -p /mongodb/replica_sets/myrs_27017(端口)/data/db

② 新建或修改配置文件

vim /mongodb/replica_sets/myrs_27017/mongod.conf
写入配置文件的内容保存

(2)初始化配置副本集和主节点
① 连接主节点副本集

/usr/local/mongodb/bin/mongo --host=主机地址 --port=27017

② 初始化副本集

rs.initiate()

③ 查看副本集的配置内容

rs.config()或rs.status()

④ 添加副本从节点

rs.add(host:端口)

⑤ 添加仲裁节点

rs.addArb(host:端口)

⑥ 开启关闭从节点的读权限

rs.slaveOk(true/false)

(3)SpringDataMongoDB连接副本集
yml连接:使用API调用测试

spring:
 data:
  mongodb:
   uri:mongodb://host1,host2,host3/数据库?connect=replicaSet&slaveOk=true&replicaSet=副本集名字
2 分片集群

(1)分片集群中的组件及搭建
在这里插入图片描述

(2)分片节点和副本集的创建
① 搭建和初始化两套副本集
过程和搭建初始化副本集的过程类似,不同的是配置文件中需要添加分片角色

 .....
replication:
 replSetName:名称
sharding:
 clusterRole:shardsvr或configvr

② 路由节点的创建
创建日志的目录和配置文件mongos.conf

...
sharding:
 #指定配置节点副本集
 configDB:config名/副本集的多个host:端口

(3) 路由节点操作
① 给路由节点添加分片

sh.addShard(“分片名称/IP:Port”)

② 开启分片功能

sh.enableSharding("库名称“)
sh.shardCollection(”库名.集合名“,{“key”:1})

③ 分片策略
哈希策略:(推荐)

sh.shardCollection(”库名.集合名“,{“key”:“hashed”})

范围策略:

sh.shardCollection(”库名.集合名“,{“key”:“范围数值”})

3 安全认证

(1)添加用户角色和权限
① 创建用户:

db.createUser({user:“用户名”,pwd:“密码”,roles:[“root(角色)”,“db”:“库”]})

② 查看创建的用户

db.system.users.find()

③ 删除创建的用户

db.dropUser(“用户名”)

④ 修改密码

db.changeUserPassword(”用户名“,”密码“)

⑤ 测试用户是否添加正确

db.auth(“用户名”,“密码”)

(2)服务端给开启认证和客户端连接登陆
① 开启认证:

在mongod.conf配置文件中加入

security:
 #开启认证方式运行
 authorization: enabled

② 客户端登录

/usr/local/mongodb/bin/mongo --host=主机地址 --port=27017
use 数据库
db.auth(“用户名”,“密码”)
db.system.users.find(“用户名”)

③ 在springData上认证

spring:
 data:
  mongodb:
   uri:mongodb://用户名:密码@IP:Port/库名

(2)副本集群安全认证
① 给主节点创建用户
② 创建key文件

openssl rand -base64 90 -out ./mongo.keyfile #创建keyfile文件
chmod 400 ./mongo.keyfile # 修改权限为当前用户只读
ll mongo.keyfile
将生成的key文件拷贝到各自的目录中:cp mongo.keyfile /mongodb/replica_sets/目录名

③ 修改配置文件mongod.conf

security:
 #keyFile鉴权文件
 keyFile: mongo.keyfile的位置
 #开启认证方式运行
 authorization: enabled

④ springData连接副本集

spring:
 data:
  mongodb:
   uri:mongodb://用户名:密码@IP:Port(多个)/库名?connect=replicaSet&slaveOk=true&replicaSet=副本集名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值