2016-04-26 18 views
2

私はAggregationCriteriaを使用して動的MongoDBクエリを作成しています。Spring MongoDB:Criteriaメソッド非静的アクセス

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オブジェクトが毎回空になります。

この場合、どのような代替方法をお勧めしますか?それとも私は何か間違っているのですか?

答えて

2

さてさて、次のように答えは非常に簡単であることが判明したので:

Criteria criteria = new Criteria(); 

criteria = criteria.where("publisherId").is(publisherId); 
if(<condition>) criteria = criteria.orOperator(
         Criteria.where("something").is("something")); 
関連する問題