Spring MongoDB: 条件方法非静态访问
Spring MongoDB: Criteria methods non-static access
我正在使用 Aggregation
和 Criteria
编写动态 MongoDB 查询。
Aggregation aggregation;
AggregationResults<DataContentResult> result;
List<DataContentResult> theResult;
try {
aggregation = Aggregation.newAggregation(
buildMatchCriteriaForAggregation(publisherId, filter)
, buildGroupOperationForAggregation());
result = mongoTemplate.aggregate(aggregation, DataContent.class, DataContentResult.class);
theResult = result.getMappedResults();
} catch (Exception e) {
e.printStackTrace();
}
@SuppressWarnings("static-access")
private AggregationOperation buildMatchCriteriaForAggregation(Integer publisherId, Filter filterCriteria){
Criteria criteria = new Criteria();
criteria.where("publisherId").is(publisherId);
if (filterCriteria.getTa() != null) criteria.where("type").is(filterCriteria.getTa());
if (filterCriteria.getPlz() != null) criteria.where("zip").is(ilterCriteria.getPlz());
if (filterCriteria.getTbVerlag() != null) criteria.where("tbVerlagNr").is(filterCriteria.getTbVerlag());
return Aggregation.match(criteria);
}
现在我知道我应该像 Criteria.where("something").is("something")
一样以静态方式访问 Criteria
方法。但就我而言,我需要根据它们的可用性指定我的 Filter
标准。因此我必须像上面那样做。这不起作用,并且 criteria
对象由于某种原因每次都为空。
在这种情况下推荐什么替代方法?还是我做错了什么?
好吧,答案很简单,如下所示:
Criteria criteria = new Criteria();
criteria = criteria.where("publisherId").is(publisherId);
if(<condition>) criteria = criteria.orOperator(
Criteria.where("something").is("something"));
我正在使用 Aggregation
和 Criteria
编写动态 MongoDB 查询。
Aggregation aggregation;
AggregationResults<DataContentResult> result;
List<DataContentResult> theResult;
try {
aggregation = Aggregation.newAggregation(
buildMatchCriteriaForAggregation(publisherId, filter)
, buildGroupOperationForAggregation());
result = mongoTemplate.aggregate(aggregation, DataContent.class, DataContentResult.class);
theResult = result.getMappedResults();
} catch (Exception e) {
e.printStackTrace();
}
@SuppressWarnings("static-access")
private AggregationOperation buildMatchCriteriaForAggregation(Integer publisherId, Filter filterCriteria){
Criteria criteria = new Criteria();
criteria.where("publisherId").is(publisherId);
if (filterCriteria.getTa() != null) criteria.where("type").is(filterCriteria.getTa());
if (filterCriteria.getPlz() != null) criteria.where("zip").is(ilterCriteria.getPlz());
if (filterCriteria.getTbVerlag() != null) criteria.where("tbVerlagNr").is(filterCriteria.getTbVerlag());
return Aggregation.match(criteria);
}
现在我知道我应该像 Criteria.where("something").is("something")
一样以静态方式访问 Criteria
方法。但就我而言,我需要根据它们的可用性指定我的 Filter
标准。因此我必须像上面那样做。这不起作用,并且 criteria
对象由于某种原因每次都为空。
在这种情况下推荐什么替代方法?还是我做错了什么?
好吧,答案很简单,如下所示:
Criteria criteria = new Criteria();
criteria = criteria.where("publisherId").is(publisherId);
if(<condition>) criteria = criteria.orOperator(
Criteria.where("something").is("something"));