我正在尝试使用 spring mongodb 模板来使用 agrregation。分组必须在文档的第三级进行。输入文件是
{
"_id": "59036b0fa036cc28c8e07db6",
"sections": [{
"srcName": "test1",
"data": [{
"srcKey": "",
"rowIdx": 0,
"values": [{
"srcDesc": "Assets"
},
{
"srcDesc": "NonAssets"
},
{
"srcDesc": "liabilities"
}
]
},
{
"srcKey": "01",
"rowIdx": 1,
"values": [{
"srcDesc": "NonAssets"
}]
}
]
}]
}
本质上我想运行查询
select distinct(srcdesc) from document where srcName="test1";
请看 srcDesc 是第三层嵌套。我正在尝试下面的java代码
private MatchOperation getMatchOPeration(String sectionName){
Criteria criteira=Criteria.where("sectionName").in(sectionName);
return match(criteira);
}
private GroupOperation getGroupOperaion(){
return group("srcDesc").last("srcDesc").as("srcDesc");
}
private ProjectionOperation getProjectionOPeration(){
return project("srcDesc").and("srcDesc").previousOperation();
}
public List<SourceName> findAllSourceNamesBySection(String sectionName){
List<SectionsDocument> sourceNameList=new ArrayList<>();
MatchOperation matchOPeration=getMatchOPeration(sectionName);
GroupOperation groupOperation=getGroupOperaion();
ProjectionOperation projectionOperation=getProjectionOPeration();
AggregationResults<SectionsDocument> aggregationResults=
mongoTemplate.aggregate(Aggregation.newAggregation(
matchOPeration,
unwind("sections.data.values"),
groupOperation,
projectionOperation),StatDocument.class,SectionsDocument.class);
sourceNameList=aggregationResults.getMappedResults();
return new ArrayList<>();
}