From 5c75bbeeabb9273f1dc52cb121047b63f6effea5 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Wed, 15 Feb 2017 12:34:57 -0600 Subject: [PATCH] Uses $group aggregator to get last stroke number rather than looping through all strokes --- src/main/java/com/henrypump/poc/Database.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/henrypump/poc/Database.java b/src/main/java/com/henrypump/poc/Database.java index 2751715..2545365 100644 --- a/src/main/java/com/henrypump/poc/Database.java +++ b/src/main/java/com/henrypump/poc/Database.java @@ -6,8 +6,11 @@ package com.henrypump.poc; import com.mongodb.*; +import com.mongodb.client.AggregateIterable; import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoCollection; +import com.mongodb.client.model.Accumulators; +import com.mongodb.client.model.Aggregates; import com.mongodb.client.model.Sorts; import org.bson.Document; @@ -19,6 +22,7 @@ import static com.mongodb.client.model.Filters.*; import javax.print.Doc; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; public class Database { @@ -32,17 +36,25 @@ public class Database { } public long getLastStrokeNum(){ - MongoCollection collection = database.getCollection("cards"); - MongoCursor cursor = collection.find().iterator(); + long lastStroke = 0; + + MongoCollection collection = database.getCollection("cards"); + MongoCursor cursor = collection.aggregate( + Arrays.asList( + Aggregates.group("strokeNumber", Accumulators.last("lastStroke", "$strokeNumber")) + ) + ).iterator(); + try { while (cursor.hasNext()) { - long docStroke = (Long) cursor.next().get("strokeNumber"); + long docStroke = cursor.next().getLong("lastStroke"); if (docStroke > lastStroke) { lastStroke = docStroke; } } } finally { cursor.close(); } + System.out.println("Found last stroke to be " + lastStroke); return lastStroke; }