Spring 数据 mongo 带@Field 注释的聚合

Spring data mongo aggregation with @Field annotation

我需要对 mongo 中的嵌套字段执行分组。 二级嵌套字段用@Field 注释。我正在使用 groupBy 的投影。 例子

ProjectionOperation projectionOperation = Aggregation.project("id")
            .and("author.eid").as("user");
GroupOperation groupOperation = Aggregation.group(aggregationBy, "user").count().as("total");
Aggregation aggregation =
        Aggregation.newAggregation(projectionOperation groupOperation);
AggregationResults<Document> aggregationResults = myRepository.getMongoTemplate().aggregate(aggregation, MyClass.class, Document.class);

执行时出现错误“org.springframework.data.mapping.PropertyReferenceException:未找到类型为 User 的 属性 eid!

public class MyClass {
 User author;
}
public class User {
 @Field("eid")
 @JsonProperty("eid") // fasterxml
 public String externalId;
}

我能想到的是将聚合结果投射到MyClass时,无法找到"eid",因为它被注释了。

如何处理这个用例?

解析的 @Field 注释将 pojo 属性 替换为字段名称。

所以你应该使用

ProjectionOperation projectionOperation = Aggregation.project("id")
            .and("author.externalId").as("user");

生成的查询将是

{ "$project" : { "user" : "$author.eid" }