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
...
}
2020年9月4日更新
1.不需要如此复杂,直接写对应的字段就可以了。spring会自动完成映射。
2.如果发现_id 没有映射出来,直接在字段上面加@Id