MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come applicare il gruppo su un documento nidificato in MongoDB usando MongoTemplate?

I dati di primavera MongoTemplate il codice per l'aggregazione data è il seguente.

Nota che ho aggiunto un progetto fase prima del gruppo . Questo progetto è obbligatorio; se i campi nidificati ("details.student._id" e "details.studentStatus.statusCode") vengono utilizzati direttamente all'interno del gruppo fase ci sono errori "FieldPath field names may not contain '.'." e non può essere risolto (e questo accade solo quando utilizzi più di un campo nel raggruppamento).

Il risultato è lo stesso dell'aggregazione che hai fornito. Ho usato gli ultimi driver Spring e MongoDB con 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);