Uses $group aggregator to get last stroke number rather than looping through all strokes
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user