当前位置: 首页 > news >正文

SpringBoot 集成 MongoDB

       MongoDB是一个非常强大的非关系型数据库,他以集合的形式存储我们的数据到数据库,他灵活的数据结构以及便于快速迭代业务的使用场景,包括他强大的查询相应速度,导致应用场景越来越普遍,下面我们将讲解如何使用我们的MongoDB集成我们的SpringBoot。

安装:

              这里讲解如何在win10上面安装我们的MongoDB。下载地址。下载完成以后双击打开下载应用包。

后面一直下一步到完成就好。。。。。。。。。。,下面使用工具链接到我们的MongoDB,不需要账号密码。

SpringBoot依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>3.4.0</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version><scope>compile</scope>
</dependency>

spring.application.name=kafkaTestspring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydatabase
#不需要密码验证
spring.data.mongodb.uri=mongodb://localhost:27017/mydatabase
#需要密码验证
#spring.data.mongodb.uri=mongodb://rootuser:rootpwd@localhost:27017/mydatabase
package org.aogo.kafkatest.entity;import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "users")
@Data
@Accessors(chain = true)
public class User {@Idprivate String id;private String username;private String email;}
package org.aogo.kafkatest.api;import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.aogo.kafkatest.entity.User;
import org.aogo.kafkatest.server.UserService;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;@Slf4j
@RestController
@RequestMapping("/api/account")
@CrossOrigin(origins = "*")
public class AccountController {@Resourceprivate UserService userService;@GetMapping("test")public User getUser() {User user = new User();user.setId("38");user.setUsername("388");user.setEmail("38888888@qq.com");userService.saveUser(user);if(user != null){throw new RuntimeException("Username cannot be null");}//userService.getUserByUser("28");return user;}}
package org.aogo.kafkatest.server;import org.aogo.kafkatest.entity.User;
import org.springframework.data.mongodb.repository.MongoRepository;public interface UserRepository extends MongoRepository<User, String> {// 可以在这里定义一些自定义的查询方法
}
package org.aogo.kafkatest.server;import org.aogo.kafkatest.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {private final UserRepository userRepository;@Autowiredpublic UserService(UserRepository userRepository) {this.userRepository = userRepository;}public void saveUser(User user) {//保存或者更新userRepository.save(user);}public User getUserById(String id) {return userRepository.findById(id).orElse(null);}public Page<User> getUserByUser(String id) {//分页Pageable pageable = PageRequest.of(0, 10, Sort.by("id").descending()); // 第 0 页,每页 10 条数据User user = new User();user.setUsername("名稱");Example<User> example = Example.of(user);// 查询分页结果Page<User> userPage = userRepository.findAll(example,pageable);return userPage;}}

常用语法:

//切换到数据库
use mydatabase
//创建用户并赋予权限
db.createUser({user: "rootuser",        // 用户名pwd: "rootpwd",         // 密码roles: [{ role: "readWrite", db: "mydatabase" }  // 给用户赋予mydatabase数据库的权限   权限类别给admin类别]
})//查看用户
show users
//查看版本号
db.version()
//插入数据
db.users.insert({_id: '50',username: "7899",email: "7899"
})//查询文档
db.users.find()//根据条件查询文档
db.users.find({_id:'50'})//保存/更新
db.users.save({_id: '50',username: "789911",email: "7899"
})
//更新语句
db.users.update({ _id: "50" },  // 查询条件{               // 更新的内容$set: { username: "789911", email: "7899111" }}
)

聚合函数:

//根据条件统计
db.users.count({_id:'50'})
//去重函数
db.users.distinct("username")//投影   $project  函数
db.users.aggregate([{$project: {names: "$username" // 将字段 "username" 投影为 "names"}}
]);//投影 查询显示出指定的字段 ,  为0表示不显示出来,为1表示显示该字段的值
db.users.aggregate([{$project: {_id:0,names: "$username", // 将字段 "username" 投影为 "names"email:1}}
]);//分页
db.users.aggregate([{$limit:5}])
//从第5条开始显示
db.users.aggregate([{$skip:5}])
//分页查询
db.users.aggregate([{$skip:1},{$limit:5}])//排序  1:升序  -1降序
db.users.aggregate([{$sort: { _id: -1} }
]);db.users.aggregate([{$sort: { _id: -1,email:1} }
]);

关联查询:

//关联查询
db.users.aggregate([{$lookup:{from: "account",     //关联的表localField: "_id",   //关联的idforeignField: "_id", //关联的IDas: "account_info"   //查询出来数组别名}},{$lookup:{from: "order",        //关联的订单表localField: "_id",    //用户表ID关联foreignField: "type",  //订单表的状态关联as: "orders"            //查询的结果取别名}}
]).pretty()

分组:

//分组   group
db.users.aggregate([{$group: {_id: null,          // 将所有文档分组为一个组count: { $sum: 1 },  // 统计文档总数pop: {$sum: '$_id'},  //求和    别名:popavg: {$avg: '$_id'}    //求平均值  别名:avg}}
]);


http://www.mrgr.cn/news/81490.html

相关文章:

  • 漏洞扫描:网络安全的 “体检” 与 “防护指南”
  • 小程序app封装公用顶部筛选区uv-drop-down
  • 计算机网络B重修班-期末复习
  • java全栈day19--Web后端实战(java操作数据库3)
  • 捋一捋相关性运算,以及DTD和NLP中的应用
  • 科研笔记 KDD 2025
  • 驱动开发系列31 - Linux Graphics 调试 mesa 的 glDrawArrays (三)
  • 51c大模型~合集96
  • 【ES6复习笔记】集合Set(13)
  • 【深度学习实战:kaggle自然场景的图像分类-----使用keras框架实现vgg16的迁移学习】
  • Jenkins 构建流水线
  • 【ES6复习笔记】Symbol 类型及其应用(9)
  • Vue3 中使用axios
  • 深入理解C++智能指针:从std::auto_ptr到现代C++的演进
  • 重温设计模式--8、命令模式
  • cannot import name ‘_C‘ from ‘pytorch3d‘
  • 骑砍2霸主MOD开发(26)-Mono脚本系统
  • More Effective C++之技术Techniques,Idioms,Patterns_条款26-27
  • 【Hot100刷题计划】Day04 栈专题 1~3天回顾(持续更新)
  • 细说STM32F407单片机通过IIC读写EEPROM 24C02
  • 【ES6复习笔记】Spread 扩展运算符(8)
  • 基础运维学习计划-base版
  • 【golang】map遍历注意事项
  • 【ES6复习笔记】解构赋值(2)
  • 知识碎片-环境配置
  • Es搭建——单节点——Linux