2016-07-24 13 views
1

Ich habe ein Übereinstimmungskriterium wie this-Spring Data + Mongo- Summe von Feld ohne Gruppe

Criteria criteria = new Criteria() 
       .and("paidMobileMetadata").in(metadataList) 
       .and("localDate").gt(startDate).lte(endDate); 

Jetzt möchte ich Summe von Feld bekommen sagen „Geld“ gehört zur oben criterie ohne irgendeine Feld Gruppierung über.

Früher i gleiche Problem hatte, wo ich dieses Spiel Kriterium über einen gewissen Bereich zu einer Gruppe haben, ich mag es this-

Aggregation agg = Aggregation.newAggregation(
       Aggregation.match(new Criteria() 
        .and("paidMobileMetadata").in(metadataList) 
        .and("localDate").gt(startDate).lte(endDate)), 
       Aggregation.group("anyField").sum("money").as("total") 
     ); 

getan hatte, aber hier kippe ich Gruppe es, Gibt es eine Möglichkeit in Mongo zu Gruppe das ganze Dokument, ohne irgendein Feld.

Explaination: sagen wir mal 500 Zeilen/doc zu meinen Kriterien gehören, und alles Geld Feld haben in it.I ohne Gruppierung aller 500 Geld, summieren möchten.

Wenn ich wie this-

versucht
Aggregation agg = Aggregation.newAggregation(
       Aggregation.match(new Criteria() 
        .and("paidMobileMetadata").in(metadataList) 
        .and("localDate").gt(startDate).lte(endDate)), 
       Aggregation.group(null).sum("money").as("total") 
     ); 

Geben Sie mir Ausnahme sagen Aggregation Feld nicht null oder leer sein kann!

+0

Können Sie einige Beispieldokumente und Ihre erwartete Ausgabe zeigen? – chridam

+0

@chridam haben durch Problem erklärt. –

Antwort

1

Geben Sie einfach ohne Argument, weil nicht eins gleich null liefert:

Aggregation agg = Aggregation.newAggregation(
       Aggregation.match(new Criteria() 
        .and("paidMobileMetadata").in(metadataList) 
        .and("localDate").gt(startDate).lte(endDate)), 
       Aggregation.group().sum("money").as("total") 
     );