springBoot整合mongodb

一、开启mongodb认证模式

1.用户常用权限

1.1 read

适用范围:指定数据库。
权限:允许用户读取指定数据库中的数据。

1.2 readWrite

适用范围:指定数据库。
权限:允许用户读取和写入指定数据库中的数据。

1.3 dbAdmin

适用范围:指定数据库。
权限:允许用户管理(包括创建和删除)指定数据库中的集合和索引。

1.4 dbOwner

适用范围:指定数据库。
权限:允许用户在指定数据库上执行任意操作,相当于拥有该数据库的所有权限。

1.5 userAdmin

适用范围:指定数据库。
权限:允许用户管理指定数据库中的用户和角色。

1.6 clusterAdmin

适用范围:整个集群。
权限:允许用户在整个 MongoDB 集群上执行任意操作,包括管理其他用户、设置复制集和分片等。

1.7 readAnyDatabase

适用范围:所有数据库。
权限:允许用户在任意数据库上进行读取操作。

1.8 readWriteAnyDatabase

适用范围:所有数据库。
权限:允许用户在任意数据库上进行读写操作。

1.9 userAdminAnyDatabase

适用范围:所有数据库。
权限:允许用户在任意数据库上管理用户和角色。

1.10 dbAdminAnyDatabase

适用范围:所有数据库。
权限:允许用户在任意数据库上执行管理操作(集合和索引)。

1.11 root

适用范围:整个 MongoDB 实例。
权限:root 是 MongoDB 中的超级用户角色,拥有集群中所有数据库的完全访问权限。root 用户可以执行任何操作,包括创建、删除数据库,管理用户和角色,设置权限等。该角色相当于 MongoDB 的管理员用户,应当谨慎授权给需要执行集群范围内最高级别操作的用户。

2.创建用户

db.creatUser({user:"mbb",pwd:"mbb",roles["root"]})

3.开启用户登录认证

mongod --auth --dbpath D:\MongoDB\data\db

4.用户登录操作

mongosh -u mbb -p mbb --authenticationDatabase admin

二、springBoot集成mongodb

1.引入对应jar包

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
      <version>2.6.0</version>
    </dependency>

2.配置yml

  data:
    mongodb:
      uri: mongodb://mbb:mbb@127.0.0.1:27017/test?authSource=admin
#      等同于url
#      database: test
#      host: 127.0.0.1
#      port: 27017
#      username: mbb
#      password: mbb
#      authentication-database: admin

3.集合操作

3.1控制层

    @GetMapping("test")
    public ResultJson mongodbTestInsert(@RequestParam(value = "name") String name){
        mongodbUtil.createCollection(name);
        return new ResultJson(StatusCode.OK);
    }

3.2工具类

//注意一旦我们注入spring管理的bean,我们就需要把对应类注册给spring管理,才能够进行bean的注入
@Component
@Slf4j
public class MongodbUtil {

    @Resource
    private MongoTemplate mongoTemplate;

    //集合创建
    public Boolean createCollection(String collectionName) {
        boolean b = mongoTemplate.collectionExists(collectionName);
        if (b) {
            return true;
        }
        try {
            mongoTemplate.createCollection(collectionName);
            return true;
        } catch (Exception e) {
            log.error("创建集合失败:" + e.getMessage());
            return false;
        }
    }

    //集合删除
    public Boolean dropCollection(String name){
        try {
            mongoTemplate.dropCollection(name);
        }catch (Exception e){
            return false;
        }
        return true;
    }
}

4.文档操作

4.1 相关注解

4.1.1 @Document:

意思:@Document 注解用于指定一个类是 MongoDB 的文档,即该类的对象会被存储到指定的集合中。可以用于类级别

4.1.2 @Id/@MongoId

意思:@Id 注解用于指定一个字段作为文档的主键。MongoDB 中的文档必须有一个唯一的主键 _id,可以是任何类型,通常是 String 或 ObjectId。

4.1.3 @Field

意思:@Field 注解用于指定类的字段与 MongoDB 文档中的字段的映射关系。如果字段名与文档字段名相同,则可以省略该注解。

4.1.4 @Indexed

意思:@Indexed 注解用于在 MongoDB 中为字段创建索引,以提高查询性能。

4.1.5 @DBRef:

意思:@DBRef 注解用于实现关联关系,允许在文档中存储其他文档的引用。在查询时,可以自动解析这些引用。

4.1.6 @Transient:

意思:@Transient 注解用于指定字段不会被存储到 MongoDB 中,即该字段会被忽略。

@Document("user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @MongoId
    private Integer id;
    @Field("username")
    private String name;
    @Field
    private String sex;
    @Field
    private int age;
}

4.2 文档新增

        //当Id存在就覆盖,不存在就新增
//        mongoTemplate.save(new User(1,"mbb","男",25));
        //id存在抛出异常 com.mongodb.MongoWriteException
//        mongoTemplate.insert(new User(1,"mbb","男",25));
        //insert可以批量插入
        List<User> userList = Arrays.asList(
                new User(2,"张三","男",25),
                new User(3,"李四","男",24),
                new User(4,"王五","男",50),
                new User(5,"刘六","男",30),
                new User(6,"黄芪","女",22)
        );
        mongoTemplate.insert(userList, User.class);
    }

4.3 文档查询

4.3.1 基础查询
//查询所有数据
List<User> userList = mongoTemplate.findAll(User.class);
userList.forEach(System.out::println);

System.out.println("=====================");

List<User> userList1 = mongoTemplate.find(new Query(), User.class);
userList1.stream().forEach(System.out::println);

System.out.println("----------------------");
//根据Id查询
User user = mongoTemplate.findById(1, User.class);
System.out.println("ID为" + 1 + "用户信息:" + user);

System.out.println("++++++++++++++++++++++");
//查询出来多个返回第一个文档
User one = mongoTemplate.findOne(new Query(), User.class);
System.out.println("第一个用户信息:" + user);

System.out.println("!!!!!!!!!!!!!!!!!!!!!!");

//条件查询年龄大于等于30
List<User> userList2 = mongoTemplate.find(new Query(Criteria.where("age").gte(30)), User.class);
userList2.stream().forEach(System.out::println);

System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@");

//年龄大于20小于50
List<User> userList3 = mongoTemplate.find(new Query(Criteria.where("age").gt(20).lt(50)), User.class);
userList3.stream().forEach(System.out::println);

System.out.println("#####################");

//正则查询(模糊查询)名字含有张性别
List<User> userList4 = mongoTemplate.find(new Query(Criteria.where("name").regex("张")), User.class);
userList4.stream().forEach(System.out::println);

System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$");

//and 查询性别男,年龄大于25的
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("sex").is("男"),Criteria.where("age").gt(25));
Query query = new Query();
query.addCriteria(criteria);
//排序处理 + 分页处理
query.with(Sort.by(Sort.Order.desc("id")))
        .skip(0) //指定跳过记录数
        .limit(1); //查询条数
List<User> userList5 = mongoTemplate.find(query, User.class);
userList5.stream().forEach(System.out::println);
4.3.2 使用JSON查询
//使用json字符串进行查询
//等值查询
//String json = "{name:'张三'}";
//多条件查询
String json = "{$or:[{sex:'男'},{age:{$gt:30}}]}";
Query query = new BasicQuery(json);
List<User> userList = mongoTemplate.find(query, User.class);
userList.stream().forEach(System.out::println);

4.4 更新文档

updateFirst:更新匹配查询条件的第一个文档
updateMany:更新匹配查询条件的所有文档
upsert:有就修改,无就新增

//设置查询条件
Query query = new Query(Criteria.where("sex").is("男"));
mongoTemplate.find(query, User.class).forEach(System.out::println);

System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!");

Update update = new Update();
update.set("age",99);
//updateFirst:更新匹配查询条件的第一个文档
mongoTemplate.updateFirst(query,update, User.class);
mongoTemplate.find(query, User.class).forEach(System.out::println);

System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

//updateMany:更新匹配查询条件的所有文档
mongoTemplate.updateMulti(query,update, User.class);
mongoTemplate.find(query, User.class).forEach(System.out::println);

System.out.println("############################");

//upsert:有就修改,无就新增
Query query1 = new Query(Criteria.where("age").is("130"));
Update update1 = new Update();
update1.setOnInsert("id",7);
mongoTemplate.upsert(query1,update1, User.class);
mongoTemplate.find(new Query(), User.class).forEach(System.out::println);

4.5 删除文档

//我们删除所有数据可以直接用集合删除 mongoTemplate.dropCollection(name/对象类.class)
//mongoTemplate.remove(new Query(), User.class); //删除所有数据
mongoTemplate.find(new Query(),User.class).forEach(System.out::println);

System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

//按条件删除
Query query = new Query(Criteria.where("age").gte(99));
mongoTemplate.remove(query, User.class);

mongoTemplate.find(new Query(),User.class).forEach(System.out::println);

下一篇是聚合查询,不足之处望海涵;

相关推荐

  1. springBoot整合mongodb

    2024-07-10 09:32:05       7 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 09:32:05       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 09:32:05       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 09:32:05       4 阅读
  4. Python语言-面向对象

    2024-07-10 09:32:05       4 阅读

热门阅读

  1. STM32 系统时钟初始化函数和延时函数

    2024-07-10 09:32:05       8 阅读
  2. Oracle数据库服务器CPU占用率巨高的问题排查思路

    2024-07-10 09:32:05       10 阅读
  3. WebKit简介及工作流程

    2024-07-10 09:32:05       9 阅读
  4. nlp中tokenizer用法

    2024-07-10 09:32:05       10 阅读
  5. 2.Date类型的请求参数

    2024-07-10 09:32:05       10 阅读
  6. 基于antdesign封装一个react的上传组件

    2024-07-10 09:32:05       12 阅读
  7. Leetcode100.判断两颗二叉树是否相同

    2024-07-10 09:32:05       9 阅读
  8. 防止应用调试分析IP被扫描加固实战教程

    2024-07-10 09:32:05       9 阅读