mongo在做聚合group操作的時候,經常會遇到 聯合字段唯一的場景。這裏記錄一下,在java中如何寫group語句
Fields fields = Fields.fields();
Fields and = fields.and(Fields.field("$userOrder.advisory", "adv")).and(Fields.field("$innerState", "innerState"));
Field adv = Fields.field("adv", "$_id.advisory");
Field innerState = Fields.field("innerState", "$_id.innerState");
Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria), Aggregation.group(and), Aggregation.project(Fields.from(adv, innerState)));
在使用 mongoOperations.aggregate() 執行聚合操作在接受聚合返回是,id無法直接映射爲具體的對象。通過使用project來將id中的字段釋放出來,這樣就可以難道聯合分組的keys了。
//執行聚合 返回類型爲 List<AggregateResult>
mongoOperations.aggregate(aggregation, CollectionClassName.class, AggregateResult.class);
//最終id會是null
class AggregateResult{
private AggregateResultId id;
//setter getter ignore
...
}
class AggregateResultId{
private String adv;
private String innerState;
//setter getter ignore
...
}
//可行的AggregateResult
class AggregateResult{
private String adv;
private String InnerState;
//setter getter ignore
...
}