2017-10-21 85 views
0

Je souhaite obtenir la valeur maximale du champ date pour la collection complète 4programmers.Valeur maximale d'un champ avec mongo-java-driver

En shell mongo Je peux écrire:

db.getCollection("4programmers").aggregate([ 
    { 
     $group: 
     { 
      _id: null, 
      max : {$max: "$date"} 
     } 
    } 
]) 

et renvoie un document à la date ISODate("2017-10-20T17:12:37.000+02:00") mais quand j'écris en java:

Date d = collection.aggregate(
       Arrays.asList(
         Aggregates.group("$date", Accumulators.max("maxx", "$date")) 
         ) 
       ).first().getDate("maxx"); 
     System.out.println(d); 

en conséquence j'obtenir: Fri Oct 20 00:44:50 CEST 2017

Quelque chose ne va pas avec first()?

Répondre

1

Le premier argument de Aggregates.group doit être null au lieu de "$ date" (il s'agit en fait de _id: null). Donc le code devrait ressembler à:

Date d = collection.aggregate(
       Arrays.asList(
         Aggregates.group(null, Accumulators.max("maxx", "$date")) 
         ) 
       ).first().getDate("maxx"); 

ou vous pouvez faire la même chose sans classe agrégats:

collection.aggregate(asList(new Document("$group", new Document("_id", null) 
       .append("max", new Document("$max", "$date"))))) 
       .first().getDate("max");