sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo aplicar group by en un documento anidado en MongoDB usando MongoTemplate?

Los datos de primavera MongoTemplate El código para la agregación dada es el siguiente.

Tenga en cuenta que he añadido un proyecto escenario ante el grupo . Este proyecto es requerido; si los campos anidados ("detalles.student._id" y "detalles.studentStatus.statusCode") se usan directamente dentro del grupo etapa hay errores "FieldPath field names may not contain '.'." y no se pudo resolver (y esto solo sucede cuando usa más de un campo en la agrupación).

El resultado es el mismo que el de la agregación que ha proporcionado. He usado los últimos controladores Spring y 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);