问题:
问题情形:一个字段多个判断条件,比如:在B和C分别不为null的情况下,增加条件A大于B,A小于C。
if (null != getStartTime) {
query.addCriteria(Criteria.where("createTime").gte(getStartTime));
}
if (null != getEndTime) {
query.addCriteria(Criteria.where("createTime").lte(getEndTime));
}
报错:(大概意思就是query中已经存在了该“字段”,不能重复添加。)
Due to limitations of the com.mongodb.BasicDocument, you can’t add a second ‘createTime’ criteria; Query already contains ‘{ “createTime” : { “KaTeX parse error: Expected '}', got 'EOF' at end of input: gte" : { "date” : “2023-11-02T16:00:00Z”}}}’
解决方案
第一次添加正常采用addCriteria(),第二次添加则通过new Criteria()配合andOperator来添加。
if (null != getStartTime) {
query.addCriteria(Criteria.where("createTime").gte(getStartTime));
}
if (null != getEndTime) {
criteria.andOperator(Criteria.where("createTime").lte(getEndTime));
}
举一反三
and一般用于“复合查询”,比如:多个不同字段查询。
andOperator可用于解决单个字段多条件查询,以及“复合查询”。
Query query = new Query();
Criteria criteria = new Criteria();
criteria.and("name").is("tom").and("sex").is("男");
Query query = Query.query(criteria);
Query query = new Query();
Criteria criteria = new Criteria();
query.addCriteria(Criteria.where("salary").lt(900));
criteria.andOperator(Criteria.where("salary").gt(800));
query.addCriteria(criteria);
引用
https://stackoverflow.com/questions/11698689/spring-mongo-criteria-querying-twice-the-same-field
https://blog.csdn.net/weixin_43252521/article/details/124694879