我的对象看起来是这样的:
{
"sourced": { "reference": "a", "otherField: 1 }
"derived": "Q"
}
我的最终目标是将其简化为:
{
"reference": "a"
}
并使用distinct删除所有重复项。
到目前为止,我得到了以下工作代码:
@Data
private static class ReducedEntity {
Sourced sourced;
}
@Data
private static class Sourced {
private String reference;
}
var aggregation = Aggregation.newAggregation(
match(new Criteria()),
Aggregation.project("sourced")
);
AggregationResults<ReducedEntity> results = mongoTemplate.aggregate(aggregation, collectionName, ReducedEntity.class);
List<ReducedEntity> mappedResult = results.getMappedResults();
return mappedResult.stream().map(book -> book.sourced.reference).collect(Collectors.toList());
它工作,但我更喜欢有一个引用属性的单个类。
一个有趣的观察是
Aggregation.project("sourced.reference")
sourced
将返回null。
我试着把“sourced.reference”Map到“reference”,但没有成功。有什么问题谢谢
1条答案
按热度按时间gojuced71#
使用
Aggregation.project("sourced.reference")
,您不再需要ReducedEntity
类,而是直接使用Sourced
类作为聚合中的outputType。