• MongoDB多条件动态查询


    一、业务场景

    公司业务框架中有需要用到MongoDB数据库进行数据的存储,前端需要在该框架下进行多条件的动态组合查询。如果在之前mysql中该问题非常好实现,那么我们使用的是MongoDB,又该如何实现呢?

    二、实现前提

    1、引入MongoDB的依赖

    1. org.springframework.boot
    2. spring-boot-starter-data-mongodb

    2、监听器

    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.context.ApplicationListener;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.context.event.ContextRefreshedEvent;
    5. import org.springframework.data.mongodb.core.MongoTemplate;
    6. import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
    7. import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
    8. import org.springframework.data.mongodb.core.convert.MongoConverter;
    9. /**
    10. * @Title: TODO
    11. * @ClassName ApplicationReadyListener
    12. * @Date 2022/11/8 15:04
    13. * @Version 1.0
    14. */
    15. @Configuration
    16. public class ApplicationReadyListener implements ApplicationListener {
    17. @Autowired
    18. MongoTemplate oneMongoTemplate;
    19. private static final String TYPEKEY = "_class";
    20. @Override
    21. public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
    22. MongoConverter converter = oneMongoTemplate.getConverter();
    23. if (converter.getTypeMapper().isTypeKey(TYPEKEY)) {
    24. ((MappingMongoConverter) converter).setTypeMapper(new DefaultMongoTypeMapper(null));
    25. }
    26. }
    27. }

    3、实体类

    1. import com.fasterxml.jackson.annotation.JsonFormat;
    2. import lombok.Data;
    3. import nonapi.io.github.classgraph.json.Id;
    4. import org.springframework.data.mongodb.core.mapping.Document;
    5. import java.io.Serializable;
    6. import java.util.Date;
    7. /**
    8. * 班次表
    9. *
    10. * @date 2022-09-05 16:01:09
    11. */
    12. @Data
    13. @Document(collection = "calendar_info")
    14. public class CalendarEntity implements Serializable {
    15. private static final long serialVersionUID = 1L;
    16. @Id
    17. private String id;
    18. private String prodLine;
    19. private String planName;
    20. @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
    21. private Date calendarTime;
    22. private String week;
    23. private String workTime;
    24. }

    三、简单实现代码

    1. /**
    2. * 根据姓名和产线查询
    3. * @param
    4. * @return
    5. */
    6. @ResponseBody
    7. @ApiOperation(value = "根据姓名和产线查询")
    8. @PostMapping("/getPlanNameLine")
    9. public R getPlanNameLine(@RequestBody Map params) {
    10. //MongoDB多条件动态查询
    11. String planName =(String) params.get("planName");
    12. String prodLine =(String) params.get("prodLine");
    13. Query query = new Query();
    14. if (!StringUtils.isEmpty(planName)) {
    15. Criteria planNameCriteria = Criteria.where("planName").is(planName);
    16. query.addCriteria(planNameCriteria);
    17. }
    18. if (!StringUtils.isEmpty(prodLine)) {
    19. Criteria prodLineCriteria = Criteria.where("prodLine").is(prodLine);
    20. query.addCriteria(prodLineCriteria);
    21. }
    22. List allList = mongoTemplate.find(query, CalendarEntity.class);
    23. return R.ok().put("data",allList);
    24. }

  • 相关阅读:
    字符串函数以及内存函数的模拟实现(万字总结)
    LIN总线入门
    国际十大优质期货投资app软件最新排名(综合版)
    大厂程序员爆料,现在紧缺这号人,简历准备好了么?
    一文揭秘高效稳定的 Apache Doris 内存管理机制
    C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换
    day05-离线留言和离线文件
    盛世古董乱世金-数据库稳定到底好不好?
    5、基础算法
    AD09 PCB拼板制作完整流程
  • 原文地址:https://blog.csdn.net/whc888666/article/details/127805106