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=副本集名