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" }
我需要对 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" }