参考链接:
https://www.cnblogs.com/lemon-flm/p/11052449.html
Spring Boot 集成 Mongo DB
https://blog.csdn.net/yanpenglei/article/details/79261875
开启认证配置
https://blog.csdn.net/weixin_41238134/article/details/100069106
参考链接中有详细的介绍。
系统环境:Cent OS 7.x
官网:https://www.mongodb.com/try/download/community
下载地址:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.6.tgz
1、解压压缩包
2、进入mongo db 目录
3、创建data/db、logs/mongodb.log
mkdir -p data/db
mkdir logs
cd logs
touch mongodb.log
cd ..
chmod -R 777 ./data/db
chmod 777 logs
4、进入bin目录下
5、创建mongodb.conf
bind_ip=0.0.0.0
# 数据文件存放目录
dbpath=/root/mongodb/mongo/data/db
# 日志文件存放目录
logpath=/root/mongodb/mongo/logs/mongodb.log
# 端口
port=27017
# 以守护线程的方式启用,即在后台运行
fork=true
6、启动mongo db
./mongod -f ./mongodb.conf
7、连接mongo db
./mongo
首先创建管理员用户
> use admin
switched to db admin
> db.createUser({user: "gitsilence", pwd: "123", roles: ["root"]})
Successfully added user: { "user" : "gitsilence", "roles" : [ "root" ] }
> show users
{
"_id" : "admin.gitsilence",
"userId" : UUID("4a8c8b13-916f-4f11-8937-51512f3d8c45"),
"user" : "gitsilence",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
>
开启认证登录
修改bin目录下的mongodb.conf
# 开启认证
auth=true
改完之后,重启即可。
可以先进入 ./mongo,执行下面命令优雅地关闭
> use admin
> db.shutdownServer()
通常我们通过代码连接mongo 的时候,具体格式如下
mongodb://username:password@127.0.0.1:27017/?xxx=xxx&aaa=xxx.....
添加管理员用户
db.createUser({user: "gitsilence", pwd: "123", roles: ["root"]})
添加普通用户 对test数据库有读写权限,对book数据库只有读权限
db.createUser({user: "test", pwd: "123", roles: [{role: "readWrite", db: "test"},
{role: "read", db: "book"}]})
删除用户
db.dropUser("test")
修改用户 的密码
db.updateUser("gitsilence", {pwd: "666"})
查询用户
show users
认证测试
db.auth("username", "password")
// 操作的集合person
// gt : >
db.person.find({"createTime": {$gt: NumberLong("1623219312312")}});
db.person.find({"status": NumberInt("0")})
// != 1
db.person.find({"status": {$ne: NumberInt("1")}})
// 更新
db.person.update({"_id": ObjectId("1mhsgdajdas")}, {$set: {"status": NumberInt("0")}});
db.person.insert({})
语句执行:
// 获取 某些字段
// 查询syncStatus 不等于 1 的数据,并且只显示name和orgName字段,不显示_id;后面字段对应为1 则为显示该字段
db.person.find(syncStatus: {$ne: 1}, {_id: 0, name: 1, orgName: 1})
// 排除某些字段
// 查询person集合,不显示 id 和 name 字段,后面字段为 0 则不会显示该字段
db.person.find({}, {_id: 0, name: 0})
/*
需要注意的是 获取某些字段 和 排除 某些字段 不能同时使用,只能使用其中一种。其中 _id 除外(获取某些字段时)
*/
MongoTemplate 实现
Query query = Query.query(Criteria.where(MongoFields.PERSON_ID)
.is(briefCaseInfo.getPersonId()));
query.fields().include("name");
mongoTemplate.findOne(query, String.class, "person");
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置
# 要保证 填写的数据库 是用户 的权限之内的
spring.data.mongodb.uri=mongodb://gitsilence:123@192.168.44.130:27017/admin
添加普通用户 对test数据库有读写权限,对book数据库只有读权限
db.createUser({user: "test", pwd: "123", roles: [{role: "readWrite", db: "test"},
{role: "read", db: "book"}]})
package com.example.springbootmongodbdemo.dao;
import com.example.springbootmongodbdemo.entity.DemoEntity;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* <h2>Demo Dao 的简单实现 </h2>
* @author gitsilence
* date 2021/6/14
*/
@Component
public class DemoEntityDaoImpl implements DemoEntityDao{
@Resource
private MongoTemplate mongoTemplate;
@Override
public void saveDemo(DemoEntity demoEntity) {
mongoTemplate.save(demoEntity);
}
@Override
public void removeDemo(String id) {
mongoTemplate.remove(id);
}
@Override
public void updateDemo(DemoEntity demoEntity) {
// 留意下 这里 用的是id, 还是_id
Query query = new Query(Criteria.where("id").is(demoEntity.getId()));
Update update = new Update();
update.set("title", demoEntity.getTitle());
update.set("description", demoEntity.getDescription());
update.set("by", demoEntity.getBy());
update.set("url", demoEntity.getUrl());
mongoTemplate.updateFirst(query, update, DemoEntity.class);
}
@Override
public DemoEntity findDemoById(String id) {
Query query = new Query(Criteria.where("id").is(id));
return mongoTemplate.findOne(query, DemoEntity.class);
}
@Override
public List<DemoEntity> findAll() {
return mongoTemplate.findAll(DemoEntity.class);
}
}
代码地址:https://github.com/MrNiebit/springboot-mongodb-demo
菜鸟教程:https://www.runoob.com/mongodb/mongodb-replication.html
知乎文章:https://zhuanlan.zhihu.com/p/69610164
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
vim bin/mongodb.conf,增加属性
# 设置副本集名称,在各个配置文件中,其值必须相同
replSet=rs-00
可以在不同机器上搭建,为了方便,这里将在一台机器上搭建 多个进程,
使用monstache工具同步ES
Github地址:https://github.com/rwynn/monstache