一.需要导入包
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Collation;
二.实现MongoDB条件筛选
注:本人MongoDB数据库存储value值均为字符串类型
入参格式:
public class ConstraintFactors {
private String factor;//筛选对象
private String strategy;//筛选条件
private String value;//筛选值
}
根据入参筛选条件,对数据中数据进行筛选
//定义查询条件
Criteria where = new Criteria();
//定义最终查询请求
Query responseQuery = new Query();
//此处遍历入参中筛选条件中数据
for (ConstraintFactors constrainFactor : constrainFactorsList) {
//对其中参数信息进行解析并填充到where中
addCriteria(where, constrainFactor);
}
//将最终条件添加到查询条件中
responseQuery.addCriteria(where);
// 设置collation,将字符串数字按照数值处理
Collation collation = Collation.of(Locale.CHINESE).numericOrdering(true);
responseQuery.collation(collation);
log.info("ResponseQuery:{}",responseQuery);
//执行多条件查询
List<ResponseVO> responseList=mongoTemplate.find(responseQuery,ResponseVO.class);
log.info("responseList:{}",responseList.size());
addCriteria方法:用于提取入参中约束因子,约束条件和约束值
public Criteria addCriteria(Criteria criteria, ConstraintFactors constrainFactor){
//判断constrainFactor的条件
if (">".equals(constrainFactor.getStrategy())) {
//根据MongoDB中存储格式进行修改(本人筛选因子存储在specific中)
criteria.and("specific." + constrainFactor.getFactor())
.gt(constrainFactor.getValue());
} else if ("<".equals(constrainFactor.getStrategy())) {
criteria.and("specific." + constrainFactor.getFactor())
.lt(constrainFactor.getValue());
} else {
criteria.and("specific." + constrainFactor.getFactor())
.is(constrainFactor.getValue());
}
return criteria;
}
由此便可以根据条件筛选出所需的MongoDB数据