MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie wende ich Gruppieren nach auf verschachtelte Dokumente in MongoDB mit MongoTemplate an?

Das Spring Data MongoTemplate Der Code für die angegebene Aggregation lautet wie folgt.

Beachten Sie, dass ich ein Projekt hinzugefügt habe Stufe vor der Gruppe . Dieses Projekt ist nötig; wenn die verschachtelten Felder ("details.student._id" und "details.studentStatus.statusCode") direkt innerhalb der Gruppe verwendet werden Stufe gibt es Fehler "FieldPath field names may not contain '.'." und konnte nicht aufgelöst werden (und dies passiert nur, wenn Sie mehr als ein Feld in der Gruppierung verwenden).

Das Ergebnis ist dasselbe wie das der von Ihnen bereitgestellten Aggregation. Ich habe die neuesten Spring- und MongoDB-Treiber mit Java 8 verwendet.

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);