sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur applicerar man group by på kapslade dokument i MongoDB med MongoTemplate?

Vårdata MongoTemplate koden för den givna aggregeringen är följande.

Observera att jag har lagt till ett projekt steg före gruppen . Detta projekt krävs; om de kapslade fälten ("details.student._id" och "details.studentStatus.statusCode") används direkt inom gruppen steg det finns fel "FieldPath field names may not contain '.'." och kunde inte lösas (och detta händer bara när du använder mer än ett fält i grupperingen).

Resultatet är detsamma som för den aggregering du har angett. Jag har använt de senaste drivrutinerna för Spring och MongoDB med 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);



  1. Hitta min- och maxvärden från arrayen i mongodb

  2. MongoDB-fel när installationsguiden slutade för tidigt när den installerades på Windows 10

  3. MongoDB extraherar värden från BasicDBObject (Java)

  4. Nodejs mongodb vaknar inte på servern