MongoDB

  |   0 评论   |   0 浏览

前言

参考链接:

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

介绍

参考链接中有详细的介绍。

Mongo DB 的安装

系统环境: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

Mongo DB 开启认证登录

首先创建管理员用户

> 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.....

Mongo DB 用户的 增删改查

  • 添加管理员用户

    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")
    

Mongo的增删改查语句

// 操作的集合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");

Spring Boot 集成 Mongo DB

依赖

<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

Mongo DB 复制(副本集)

菜鸟教程:https://www.runoob.com/mongodb/mongodb-replication.html

知乎文章:https://zhuanlan.zhihu.com/p/69610164

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

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

  • vim bin/mongodb.conf,增加属性

    # 设置副本集名称,在各个配置文件中,其值必须相同
    replSet=rs-00
    

可以在不同机器上搭建,为了方便,这里将在一台机器上搭建 多个进程,

Mongo DB 数据同步ES

使用monstache工具同步ES

Github地址:https://github.com/rwynn/monstache

官方文档:https://rwynn.github.io/monstache-site/start/