Spring mongo does not currently support:
Compound aggregation _idwith custom key names, although of course you can just accept the translation of the defualt field name
Use or any expression inside , since it only supports the displayed field. $cond $sum
, - , . , $project, , .
, , :
public class CustomGroupOperation implements AggregationOperation {
private DBObject operation;
public CustomGroupOperation (DBObject operation) {
this.operation = operation;
}
@Override
public DBObject toDBObject(AggregationOperationContext context) {
return context.getMappedObject(operation);
}
}
:
Aggregation aggregation = newAggregation(
new CustomGroupOperation(
new BasicDBObject("$group",
new BasicDBObject("_id",
new BasicDBObject("status","$status")
.append("queue","$queueName")
)
.append("count",new BasicDBObject("$sum",1))
.append("oldest", new BasicDBObject("$min","$queueTime"))
.append("slow",
new BasicDBObject("$sum",
new BasicDBObject("$cond",Arrays.asList(
new BasicDBObject("$lte",Arrays.asList(
"$queueServiceTs",
new Date()
)),
1,
0
))
)
)
)
)
);
$group , .