title: How do I group the results of mongodb query and implement in Java?
body: <p>I have a collection in a Mongo database that looks like this:</p>
  
  <pre><code>{
      "_id" : ObjectId("561b42d4e4b0d4227d011d2c"),
      "product_related_data" : {
          "depth" : 6,
          "height" : 23,
          "product_barcode" : "54491472",
          "product_name" : "xyz product",
          "product_uuid" : "009b9846-b3ad-49f7-a7a0-d35a04f83480",
          "width" : 6
      },
      "sensostrip_data" : {
          "barcode" : "130150208299",
          "battery_level" : 2.894
      },
      "stock_related_data" : {
          "calculated_max_product_percentage" : 15.625,
          "calculated_min_product_percentage" : 12.5,
          "current_stock" : 2,
          "max_stock" : 6,
          "stock_difference_percentage" : 0,
          "stock_difference_value" : 0,
          "stock_percentage" : 37.5
      },
      "store_data" : {
          "city_uuid" : "cbb4dfe8-172b-11e4-a1f0-00163ed23ec2",
          "ip" : "10.0.1.1",
          "retailer_uuid" : "8c33c32c-5903-11e4-a1f0-00163ed23ec2",
          "store_name" : "xyz store",
          "store_uuid" : "15a6cc90-081f-11e5-b213-001e6745ff8d"
      },
      "time" : {
          "check_date" : "2015-10-11 11:53:55",
          "previous_check_date" : "2015-10-11 11:48:57"
      },
      "id" : "6be54bef-0aa3-456c-b912-1731f8154e7d"
  }
  </code></pre>
  
  <p>The mongo query I'm currently executing returns all the documents for a <strong>list of store_uuid's</strong> and for a <strong>product_uuid</strong>, and looks like this:</p>
  
  <pre><code>db.readings
  .find({ $and:[ {"store_data.store_uuid": {$in:["15a6cc90-081f-11e5-b213-001e6745ff8d","217b983b-5904-11e4-a1f0-00163ed23ec2","5337d78d-5904-11e4-a1f0-00163ed23ec2"]}}
  ,{"product_related_data.product_uuid": "f44aa29d-09ce-4902-bf12-d45d44b3dfd0"}]})
  </code></pre>
  
  <p>My current <strong>Java implementation</strong> (where I make use of projection) looks like this:</p>
  
  <pre><code>DBCollection table = databaseConncetion().getCollection("readings");
  
  BasicDBObject sensorReturn = new BasicDBObject("sensostrip_data.barcode",1);
  
  BasicDBObject clause1 = new BasicDBObject("store_data.store_uuid", new BasicDBObject("$in", StoreIds));
  
  BasicDBObject clause2 = new BasicDBObject("product_related_data.product_uuid", productId);
  
  BasicDBList and = new BasicDBList();
  and.add(clause1);
  and.add(clause2);
  
  DBObject query = new BasicDBObject("$and", and);
  
  DBCursor cursor = table.find(query, sensorReturn
          .append("stock_related_data.stock_percentage",1)
          .append("store_data.store_uuid",1)
          .append("time.check_date", 1))
          .sort(new BasicDBObject("time.check_date", -1))
          .limit(100);
  </code></pre>
  
  <p>However I need this query to <strong>group the results</strong> for the <strong>latest check_date</strong> by <strong>barcode</strong></p>