Ich schreibe eine dynamische MongoDB-Abfrage mit Aggregation
und Criteria
wie so.Spring MongoDB: Kriterien Methoden nicht statischen Zugriff
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);
}
Jetzt weiß ich, dass soll ich Criteria
Methoden in einer statischen Art und Weise wie Criteria.where("something").is("something")
zuzugreifen. Aber in meinem Fall muss ich mein Filter
Kriterium abhängig von ihrer Verfügbarkeit spezifizieren. Und deshalb muss ich es wie oben tun. Dies funktioniert nicht und das criteria
Objekt endet jedes Mal aus irgendeinem Grund leer.
Welche alternative Methode wird in dieser Situation empfohlen? Oder mache ich etwas falsch?