Displaying differences for changeset
 
display as  

src/java/m/timeseries/aggregate/V1_0.java

@@ -155,8 +155,6 @@
     List<String> header = (ArrayList) locationDoc.get("header");
     List<List<Object>> data = (ArrayList) locationDoc.get("data");
     List<List<Object>> filtered = new ArrayList();
-    JSONObject statResult = new JSONObject();
-    JSONObject statResultLocal = new JSONObject();
 
     Document datesQuery = new Document();
     if ((startDate != null || endDate != null)) {
@@ -170,13 +168,21 @@
       datesQuery = new Document("data.0", datesQuery);
     }
     
-    Document project = new Document();
+    Document project = new Document(
+            "date", new Document("$arrayElemAt", Arrays.asList("$data", 0))
+    );
     for (int i = 1; i < header.size(); i++) {
       project.append(header.get(i), new Document("$arrayElemAt", Arrays.asList("$data", i)));
     }
-    project.append("month", new Document("$month", "$data.0"));
+    project.append("month", new Document("$month", new Document("$arrayElemAt", Arrays.asList("$data", 0))));
+    project.append("year", new Document("$year", new Document("$arrayElemAt", Arrays.asList("$data", 0))));
 
-    Document group = new Document("_id", "big").append("data", new Document("$push", "$data"));
+    Document group = new Document("_id", new Document("month", "$month").append("year", "$year"));
+    for (int i = 1; i < header.size(); i++) {
+      group.append(header.get(i) + "_avg", new Document("$avg", "$" + header.get(i)));
+    }
+    group.append("month", new Document("$first", "$month"));
+    group.append("year", new Document("$first", "$year"));
 
     // Export for robomongo
     List<Bson> aggList = Arrays.asList(
@@ -184,17 +190,21 @@
             Aggregates.match(datesQuery),
             Aggregates.unwind("$data"),
             Aggregates.project(project),
-            // Wind array back
-            new Document("$group", group)
+            new Document("$group", group),
+            new Document("$sort", new Document("year", 1).append("month", 1))
     );
 
     AggregateIterable<Document> iter = c.aggregate(aggList).allowDiskUse(true);
     for (Document d : iter) {
-      List<Object> row = (List<Object>) d.get("data");
-      // Fix date formatting
-      Date dt = (Date) row.get(0);
-      row.set(0, ft.format(dt));
-      filtered.add(row);
+        // Fix date formatting
+        List<Object> row = new ArrayList<>();
+        Date dt = (Date) d.get("date");
+        row.add(ft.format(dt));
+        for (int i = 1; i < header.size(); i++) {
+          String p = header.get(i);
+          row.add(d.get(p + "_avg"));
+        }
+        filtered.add(row);
     }
 
     JSONObject res = new JSONObject();

src/java/m/timeseries/query/V1_0.java

@@ -179,22 +179,17 @@
       for (int i = 1; i < header.size(); i++) {
         project.append(header.get(i), new Document("$arrayElemAt", Arrays.asList("$data", i)));
       }
-      project.append("month", new Document("$arrayElemAt", Arrays.asList("$data", 0)));
-      project.append("year", new Document("$arrayElemAt", Arrays.asList("$data", 0)));
 
-      Document group = new Document("_id", new Document("month", "$month").append("year", "$year"));
-      for (int i = 1; i < header.size(); i++) {
-        group.append(header.get(i) + "_avg", new Document("$avg", "$" + header.get(i)));
-      }
+      Document group = new Document("_id", "big").append("data", new Document("$push", "$data"));
 
       // Export for robomongo
       List<Bson> aggList = Arrays.asList(
               Aggregates.match(new Document("location_id", locationDoc.getString("_id"))),
               Aggregates.unwind("$data"),
-              Aggregates.match(datesQuery),
-              Aggregates.project(project),
-              new Document("$group", group),
-              new Document("$sort", new Document("year", 1).append("month", 1))
+              //Aggregates.project(project)
+              Aggregates.match(datesQuery)
+              // Wind array back
+              // new Document("$group", group)
       );
 
       AggregateIterable<Document> iter = c.aggregate(aggList).allowDiskUse(true);