69、MongoDB的使用学习
一、docker 安装mongodb
1、下载镜像:docker pull mongo:latest 或者 docker pull bitnami/mongodb
2、创建和启动容器: docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
3、进入容器: docker exec -it mymongo/bin/bash
4、使用MongoDB客户端进行操作 : mongo
5、查询所有的数据库 : show dbs
二、配置MongDB到项目
1、引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.10.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
2、配置文件
spring.application.name=mongodb-demo spring.data.mongodb.uri=mongodb://175.178.28.9:27017/test
3、创建实体类
@Data @Document("User") public class User { @Id private String id; private String name; private Integer age; private String email; private Date createDate; }
4、添加启动、测试类
@SpringBootApplication public class MongoApplication { public static void main(String[] args) { SpringApplication.run(MongoApplication.class,args); } } @SpringBootTest public class MongoApplicationTest { }
三、通过 MongoTemplate 完成增删改查操作、分页、模糊查询
1、添加
//添加 @Test public void createUser() { User user = new User(); user.setAge(21); user.setName("test1"); user.setEmail("66666@qq.com"); user.setCreateDate(new Date()); User user1 = mongoTemplate.insert(user); System.out.println(user1); }
2、查询所有
//查询所有 @Test public void findUser() { List<User> userList = mongoTemplate.findAll(User.class); System.out.println(userList); }
3、根据ID查询
//根据id查询 @Test public void getById() { User user = mongoTemplate.findById("62259b9b5d2369017421170c", User.class); System.out.println(user); }
4、条件查询
//条件查询 @Test public void findUserList() { Query query = new Query(Criteria .where("name").is("test") .and("age").is(20)); List<User> userList = mongoTemplate.find(query, User.class); System.out.println(userList); }
5、模糊查询
//模糊查询 @Test public void findUsersLikeName() { String name = "est"; String regex = String.format("%s%s%s", "^.*", name, ".*$"); Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Query query = new Query(Criteria.where("name").regex(pattern)); List<User> userList = mongoTemplate.find(query, User.class); System.out.println(userList); }
6、分页查询
//分页查询 @Test public void findUsersPage() { String name = "est"; int pageNo = 1; int pageSize = 3; Query query = new Query(); String regex = String.format("%s%s%s", "^.*", name, ".*$"); Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); query.addCriteria(Criteria.where("name").regex(pattern)); int totalCount = (int) mongoTemplate.count(query, User.class); List<User> userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class); Map<String, Object> pageMap = new HashMap<>(); pageMap.put("list", userList); pageMap.put("totalCount",totalCount); System.out.println(pageMap); }
7、修改
//修改 @Test public void updateUser() { User user = mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa", User.class); user.setName("test_1"); user.setAge(25); user.setEmail("493220990@qq.com"); Query query = new Query(Criteria.where("_id").is(user.getId())); Update update = new Update(); update.set("name", user.getName()); update.set("age", user.getAge()); update.set("email", user.getEmail()); UpdateResult result = mongoTemplate.upsert(query, update, User.class); long count = result.getModifiedCount(); System.out.println(count); }
8、删除
//删除操作 @Test public void delete() { Query query = new Query(Criteria.where("_id").is("62259b9b5d2369017421170c")); DeleteResult result = mongoTemplate.remove(query, User.class); long count = result.getDeletedCount(); System.out.println(count); }
四、通过 UserRepository实现增删改查
1、创建 UserRepository
@Repository public interface UserRepository extends MongoRepository<User, String> { }
2、创建测试类
@SpringBootTest public class MongoRepositoryTest { }
3、添加操作
@Autowired private UserRepository userRepository; //添加 @Test public void createUser() { User user = new User(); user.setAge(20); user.setName("张三"); user.setEmail("3332200@qq.com"); User user1 = userRepository.save(user); }
4、查询所有
//查询所有 @Test public void findUser() { List<User> userList = userRepository.findAll(); System.out.println(userList); }
5、根据Id查询
//id查询 @Test public void getById() { User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get(); System.out.println(user); }
6、条件查询
//条件查询 @Test public void findUserList() { User user = new User(); user.setName("张三"); user.setAge(20); Example<User> userExample = Example.of(user); List<User> userList = userRepository.findAll(userExample); System.out.println(userList); }
7、模糊查询
//模糊查询 @Test public void findUsersLikeName() { //创建匹配器,即如何使用查询条件 ExampleMatcher matcher = ExampleMatcher.matching() //构建对象 .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询 .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写 User user = new User(); user.setName("三"); Example<User> userExample = Example.of(user, matcher); List<User> userList = userRepository.findAll(userExample); System.out.println(userList); }
8、分页查询
//分页查询 @Test public void findUsersPage() { Sort sort = Sort.by(Sort.Direction.DESC, "age"); //0为第一页 Pageable pageable = PageRequest.of(0, 10, sort); //创建匹配器,即如何使用查询条件 ExampleMatcher matcher = ExampleMatcher.matching() //构建对象 .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询 .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写 User user = new User(); user.setName("三"); Example<User> userExample = Example.of(user, matcher); //创建实例 Example<User> example = Example.of(user, matcher); Page<User> pages = userRepository.findAll(example, pageable); System.out.println(pages); }
9、修改
//修改 @Test public void updateUser() { User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get(); user.setName("张三_1"); user.setAge(25); user.setEmail("883220990@qq.com"); User save = userRepository.save(user); System.out.println(save); }
10、删除
//删除 @Test public void delete() { userRepository.deleteById("5ffbfe8197f24a07007bd6ce"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)