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

-
org.springframework.boot -
spring-boot-starter-data-mongodb
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.ApplicationListener;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.event.ContextRefreshedEvent;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
- import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
- import org.springframework.data.mongodb.core.convert.MongoConverter;
-
- /**
- * @Title: TODO
- * @ClassName ApplicationReadyListener
- * @Date 2022/11/8 15:04
- * @Version 1.0
- */
- @Configuration
- public class ApplicationReadyListener implements ApplicationListener
{ - @Autowired
- MongoTemplate oneMongoTemplate;
-
- private static final String TYPEKEY = "_class";
-
- @Override
- public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
- MongoConverter converter = oneMongoTemplate.getConverter();
- if (converter.getTypeMapper().isTypeKey(TYPEKEY)) {
- ((MappingMongoConverter) converter).setTypeMapper(new DefaultMongoTypeMapper(null));
- }
- }
-
- }
- import com.fasterxml.jackson.annotation.JsonFormat;
- import lombok.Data;
- import nonapi.io.github.classgraph.json.Id;
- import org.springframework.data.mongodb.core.mapping.Document;
- import java.io.Serializable;
- import java.util.Date;
-
- /**
- * 班次表
- *
- * @date 2022-09-05 16:01:09
- */
- @Data
- @Document(collection = "calendar_info")
- public class CalendarEntity implements Serializable {
- private static final long serialVersionUID = 1L;
- @Id
- private String id;
- private String prodLine;
- private String planName;
- @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
- private Date calendarTime;
- private String week;
- private String workTime;
- }
- /**
- * 根据姓名和产线查询
- * @param
- * @return
- */
- @ResponseBody
- @ApiOperation(value = "根据姓名和产线查询")
- @PostMapping("/getPlanNameLine")
- public R getPlanNameLine(@RequestBody Map
params) { - //MongoDB多条件动态查询
- String planName =(String) params.get("planName");
- String prodLine =(String) params.get("prodLine");
- Query query = new Query();
- if (!StringUtils.isEmpty(planName)) {
- Criteria planNameCriteria = Criteria.where("planName").is(planName);
- query.addCriteria(planNameCriteria);
- }
- if (!StringUtils.isEmpty(prodLine)) {
- Criteria prodLineCriteria = Criteria.where("prodLine").is(prodLine);
- query.addCriteria(prodLineCriteria);
- }
- List
allList = mongoTemplate.find(query, CalendarEntity.class); - return R.ok().put("data",allList);
- }