MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment appliquer group by sur un document imbriqué dans MongoDB à l'aide de MongoTemplate ?

Les données de printemps MongoTemplate code pour l'agrégation donnée est le suivant.

Notez que j'ai ajouté un projet étape avant le groupe . Ce projet est requis; si les champs imbriqués ("details.student._id" et "details.studentStatus.statusCode") sont utilisés directement dans le groupe étape il y a des erreurs "FieldPath field names may not contain '.'." et n'a pas pu être résolu (et cela ne se produit que lorsque vous utilisez plus d'un champ dans le regroupement).

Le résultat est le même que celui de l'agrégation que vous avez fourni. J'ai utilisé les derniers pilotes Spring et MongoDB avec 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);