MongoCollectionのcount()
を使用します メソッド、 Joda-TimeのDatetimeオブジェクトを利用するクエリフィルターを適用します Javaでの日付操作を簡素化するライブラリ。 こちらで確認できます 。基本的に、現在の時刻から15分の日時オブジェクトを作成します:
DateTime dt = new DateTime();
DateTime now = new DateTime();
DateTime subtracted = dt.minusMinutes(15);
次に、変数を使用して、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);
シャーディングされたクラスターでは、基になる db.collection.count()
孤立したドキュメントが存在する場合、またはチャンクの移行が進行中の場合、メソッドは不正確なカウントになる可能性があります。したがって、 aggregate()
を使用する方が安全です。 代わりに方法:
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;