1

Je suis nouveau sur MongoDB. Je reçois une erreur loginCollection.aggregate indiquant:La méthode aggregate (List <? Extends Bson>) dans le type MongoCollection <Document> ne s'applique pas aux arguments (BasicDBObject)

L'agrégat de la méthode (liste) dans le MongoCollection type n'est pas applicable pour les arguments (BasicDBObject)

Après mon extrait de code. Merci d'avance.

public MonthlyLoginCount monthlyLoginCount() { 

    MonthlyLoginCount monthlyLoginCount = new MonthlyLoginCount(); 
    Map<String, Long> map = new HashMap<String, Long>(); 
    MongoClient mongo = new MongoClient(dataSource, 27017); 
    MongoCollection<Document> loginCollection = mongo.getDatabase(mongoDataBase).getCollection(loginDetailsCollection); 

    AggregationOutput logincount = loginCollection.aggregate(new BasicDBObject("$group", 
      new BasicDBObject("_id", "$email_id").append("value", new BasicDBObject("$push", "$value")))); 
    Iterator<DBObject> results = logincount.results().iterator(); 

    while (results.hasNext()) { 
     try { 
      Object str = results.next().get("_id"); 

      long count = loginCollection.count(new BasicDBObject("email_id", str.toString())); 

      System.out.println("email id:: " + str.toString() + " count: " + count); 
      map.put(str.toString(), count); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    mongo.close(); 
    monthlyLoginCount.setMap(map); 
    return monthlyLoginCount; 
} 

Répondre

0

Il est un peu difficile de répondre à cela sans savoir quelle version du pilote MongoDB Java que vous utilisez ... Mais

Depuis quelque temps dans la 2.x former la méthode aggregate() a accepté un List . Par exemple:

// in 2.14 
AggregationOutput aggregate(List<DBObject> pipeline) 

// in 3.x 
AggregateIterable<TDocument> aggregate(List<? extends Bson> pipeline); 

L'un et le seul argument est un List, cette liste représente les étapes d'un pipeline d'agrégation. Par exemple:

AggregateIterable<Document> documents = collection.aggregate(Arrays.asList(
     new Document("$match", theMatchDocument), 
     new Document("$project", theProjectionDocument) 
)); 

Le message d'exception inclus dans votre question:

"L'agrégat de la méthode (liste) dans le MongoCollection type n'est pas applicable pour les arguments (BasicDBObject)"

... implique que vous essayez d'appeler aggregate(List) et l'attribution de ce à un AggregationOutput me fait suspecter que vous utilisez v2.1x (voir le API docs.Si oui, alors l'exemple posté n votre question pourrait être reformulée comme suit:

AggregationOutput logincount = loginCollection.aggregate(Arrays.asList(
     new BasicDBObject("$group", new BasicDBObject("_id", "$email_id").append("value", new BasicDBObject("$push", "$value"))) 
));