MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como aplicar group by no documento aninhado no MongoDB usando o MongoTemplate?


O Spring Data MongoTemplate o código para a agregação fornecida é o seguinte.

Observe que adicionei um projeto palco antes do grupo . Este projeto É necessário; se os campos aninhados ("details.student._id" e "details.studentStatus.statusCode") forem usados ​​diretamente no grupo stage há erros "FieldPath field names may not contain '.'." e não pôde ser resolvido (e isso só acontece quando você usa mais de um campo no agrupamento).

O resultado é o mesmo da agregação que você forneceu. Eu usei os drivers Spring e MongoDB mais recentes com Java 8.
MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "spr_test");

Aggregation agg = newAggregation(
                                unwind("details"),    
                                project("_id")
                                    .and("details.student._id").as("sid")
                                    .and("details.studentStatus.statusCode").as("statuscode"),
                                group("sid", "statuscode")
                                    .count().as("total")
);

AggregationResults<Document> aggResults = mongoOps.aggregate(agg, "students", Document.class);
aggResults.forEach(System.out::println);