No entiendo cómo escribir la consulta equivalente en Java para la versión 3.4 del controlador de esta consulta de agregación:
db.getCollection('MYTABLE').aggregate([ {"$match": { "ID_STATUSMATRICULA": 1 } }, {"$group": { "_id": null, "TOTAL" : { $sum: 1 }, "MEDIA_APROVADOS": { "$avg": { "$cond": [ { "$eq": [ "$ID_STATUSAPROVEITAMENTO", 1 ] }, "$NR_APROVEITAMENTO", 0, ] } }, "MEDIA_REPROVADOS": { "$avg": { "$cond": [ { "$eq": [ "$ID_STATUSAPROVEITAMENTO", 2 ] }, "$NR_APROVEITAMENTO", 0, ] } }, "APROVADOS": { "$sum": { "$cond": [ { "$eq": [ "$ID_STATUSAPROVEITAMENTO", 1 ] }, 1, 0, ] } }, "REPROVADOS": { "$sum": { "$cond": [ { "$eq": [ "$ID_STATUSAPROVEITAMENTO", 2 ] }, 1, 0, ] } }, "PENDENTES": { "$sum": { "$cond": [ { "$eq": [ "$ID_STATUSAPROVEITAMENTO", 0 ] }, 1, 0, ] } } }} ])¿Alguien puede ayudarme con esto? Encontré muchas muestras para el antiguo controlador 2.2, pero muy poca documentación para la versión 3.4.
RESUELTO Después de la respuesta de Sagar Reddy, puedo escribir el equivalente en java:
List pma = asList(new Document("$eq", asList("$ID_STATUSAPROVEITAMENTO", 1)), "$NR_APROVEITAMENTO", 0); List pmr = asList(new Document("$eq", asList("$ID_STATUSAPROVEITAMENTO", 2)), "$NR_APROVEITAMENTO", 0); List psa = asList(new Document("$eq", asList("$ID_STATUSAPROVEITAMENTO", 1)), 1, 0); List psr = asList(new Document("$eq", asList("$ID_STATUSAPROVEITAMENTO", 2)), 1, 0); List psp = asList(new Document("$eq", asList("$ID_STATUSAPROVEITAMENTO", 0)), 1, 0); Bson match = Aggregates.match(Filters.eq("ID_STATUSMATRICULA", 1)); Bson group = Aggregates.group(null, sum("TOTAL", 1), avg("MEDIA_APROVADOS", computed("$cond", pma) ), avg("MEDIA_REPROVADOS", computed("$cond", pmr) ), sum("APROVADOS", computed("$cond", psa) ), sum("REPROVADOS", computed("$cond", psr) ), sum("PENDENTES", computed("$cond", psp) ) ); AggregateIterable<Document> cursor = mTable.aggregate(asList(match, group));Puedes intentar algo como. Agregue el resto de campos a la agregación de $group similar a MEDIA_APROVADOS
import static com.mongodb.client.model.Accumulators.*; import static com.mongodb.client.model.Aggregates.*; import static com.mongodb.client.model.Projections.*; import static java.util.Arrays.asList; Bson match = Aggregates.match(Filters.eq("ID_STATUSMATRICULA", 1)); Bson group = group(null, avg("MEDIA_APROVADOS", computed("$cond", asList(new Document("$eq", asList("$ID_STATUSAPROVEITAMENTO", 1)), "$NR_APROVEITAMENTO", 0)) ) ); collection.aggregate(asList(match, group));