在 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"} }
这个查询生成了一个对象,里面有 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"} }