Usa el count()
de MongoCollection método, aplicando un filtro de consulta que hace uso del objeto Datetime de Joda-Time biblioteca que simplifica la manipulación de fechas en Java. Puedes comprobarlo aquí . Básicamente, cree un objeto de fecha y hora a 15 minutos de la hora actual:
DateTime dt = new DateTime();
DateTime now = new DateTime();
DateTime subtracted = dt.minusMinutes(15);
Luego use las variables para construir una consulta de rango de fechas para usar en el método count():
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);
En un clúster fragmentado, el db.collection.count()
subyacente El método puede generar un recuento inexacto si existen documentos huérfanos o si hay una migración de fragmentos en curso. Entonces es más seguro usar aggregate()
método en su lugar:
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;