@@ -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(); |
@@ -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); |