在 Spring 数据 MongoDB 聚合 $project 中表达嵌套字段

Express nested field in Spring Data MongoDB aggregation $project

这个查询生成了一个对象,里面有 key/value,正如我预期的那样

db.empdetails.aggregate( [ { $project: { reportInformationMap: { valu1: 1 } } } ] );

所以在 spring 数据中我做的是:

Aggregation.project("reportInformationMap.valu1")

Spring 数据生成如下内容:

{ "aggregate" : "__collection__" , "pipeline" : [ { "$project" : {  "valu1" : "$reportInformationMap.valu1"}}

它可以工作,但给我 valu1 作为根值。我需要它作为 reportInformationMap.

的嵌套值

您必须为此使用 ProjectionOperation.ProjectionOperationBuilder.nested 方法(nested 定义字段的嵌套字段绑定):

这是一个包含以下输入文档的示例:

{ "name" : { "first" : "John", "last" : "Doe" } }

代码:

ProjectionOperation projection = Aggregation.project().and("name").nested(Fields.fields("name.first"))

Aggregation agg = newAggregation(projection);
AggregationResults<Document> results = mongoTemplate.aggregate(agg, "test", Document.class);
results.forEach(doc -> System.out.println(doc.toJson()));

输出(预计):

{ "name": {"first": "John"} }