2017-01-10 3 views
1

Я не получаю способ записи эквивалентный запрос в Java для драйвера версии 3.4 этого агрегирования запроса:MongoDb как запись агрегации запросов в Java версии драйвера 3.4

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, ] 
      } 
     } 
    }} 
]) 

Любой человек может помочь мне с этим? Я нашел много образцов для старого драйвера 2.2, но очень плохой документации для версии 3.4.


решаемые После Сагар Reddy ответа, я могу написать эквивалент в 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)); 

ответ

4

Вы можете попробовать что-то подобное. Добавьте остальную часть полей в $group агрегации подобной как 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)); 
+0

Спасибо людей, с вами, как я могу сделать то же самое с Явой. – Leonardo

Смежные вопросы