Gebruik MongoCollection's count()
methode, een queryfilter toepassen dat gebruik maakt van het Datetime-object uit de Joda-Time bibliotheek die datummanipulatie in Java vereenvoudigt. Je kunt dat hier bekijken . Maak in principe een datetime-object 15 minuten vanaf de huidige tijd:
DateTime dt = new DateTime();
DateTime now = new DateTime();
DateTime subtracted = dt.minusMinutes(15);
Gebruik vervolgens de variabelen om een datumbereikquery te maken voor gebruik in de count()-methode:
Document query = new Document("lastlogin", new Document("$gte", subtracted).append("$lte", now));
mongoClient = new MongoClient("localhost", 3001);
long count = mongoClient.getDatabase("database1")
.getCollection("users")
.count(query);
Op een shard-cluster, de onderliggende db.collection.count()
methode kan resulteren in een onnauwkeurige telling als er zwevende documenten bestaan of als een chunk-migratie aan de gang is. Het is dus veiliger om aggregate()
. te gebruiken methode in plaats daarvan:
Iterator<Document> it = mongoClient.getDatabase("database1")
.getCollection("users")
.aggregate(Arrays.asList(
new Document("$match", new Document("lastlogin",
new Document("$gte", subtracted).append("$lte", now))
),
new Document("$group", new Document("_id", null)
.append("count",
new Document("$sum", 1)
)
)
)
).iterator();
int count = it.hasNext() ? (Integer)it.next().get("count") : 0;