Spring MongoDB: 条件方法非静态访问

Spring MongoDB: Criteria methods non-static access

我正在使用 AggregationCriteria 编写动态 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"));