Uses $group aggregator to get last stroke number rather than looping through all strokes

This commit is contained in:
Patrick McDonagh
2017-02-15 12:34:57 -06:00
parent 8d176aa60f
commit 5c75bbeeab

View File

@@ -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<Document> collection = database.getCollection("cards");
MongoCursor<Document> cursor = collection.find().iterator();
long lastStroke = 0;
MongoCollection<Document> collection = database.getCollection("cards");
MongoCursor<Document> 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;
}