Search code examples
javamongodbaveragejongo

$avg not returning average


this is my code:

//Build the query
        //match only records in cluster 1
        DBObject match = new BasicDBObject("$match", new BasicDBObject("clusterId",_id));
        //the projected result must be : clusterId, squeezePlay, weakShowdown, playsWithFriends
        DBObject projectFields = new BasicDBObject("clusterId",1);
        projectFields.put("squeezePlay", 1);
        projectFields.put("weakShowdown", 1);
        projectFields.put("playsWithFriends", 1);
        DBObject project = new BasicDBObject("$project", projectFields);        
        //the groupfields are the average of each category grouped by clusterId
        DBObject groupFields = new BasicDBObject("_id",new BasicDBObject("clusterId","$clusterId"));
        groupFields.put("squeezePlay", new BasicDBObject("$avg","$squeezePlay"));
        groupFields.put("weakShowdown", new BasicDBObject("$avg","$weakShowdown"));
        groupFields.put("playsWithFriends", new BasicDBObject("$avg","$playsWithFriends"));
        DBObject group = new BasicDBObject("$group", groupFields);


        AggregationOutput output = coll.aggregate( match, project, group);

The players in the database are the following:

        Player p1 = new Player();
        p1.SetClusterID(1);
        p1.SetId("Player 1");
        p1.SetNumberOfPlays(21);
        p1.SetPlaysWithFriends(22);
        p1.SetSqueezePlay(23);
        p1.SetWeakShowdown(24);

        Player p2 = new Player();
        p1.SetClusterID(1);
        p2.SetId("Player 2");
        p2.SetNumberOfPlays(11);
        p2.SetPlaysWithFriends(12);
        p2.SetSqueezePlay(13);
        p2.SetWeakShowdown(14);

The output whould be: (17.0, 18.0, 19.0) but instead I get: "Averages are: 23.0 22.0 24.0"which is more like a Max to me (or maybe just the result from Player 1)... I don't know.


Solution

  • Typo error:

    You should say p2.setClusterId(1) after instantiating player p2