MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Zählen Sie Ergebnisse mit MongoDB 3.0 Java Driver

Verwenden Sie count() von MongoCollection -Methode, die einen Abfragefilter anwendet, der das Datetime-Objekt aus der Joda-Time verwendet Bibliothek, die die Datumsmanipulation in Java vereinfacht. Das können Sie hier überprüfen . Erstellen Sie grundsätzlich ein datetime-Objekt 15 Minuten nach der aktuellen Zeit:

DateTime dt = new DateTime();
DateTime now = new DateTime();
DateTime subtracted = dt.minusMinutes(15);

Verwenden Sie dann die Variablen, um eine Datumsbereichsabfrage zur Verwendung in der Methode count() zu erstellen:

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);

Auf einem Sharding-Cluster die zugrunde liegende db.collection.count() -Methode kann zu einer ungenauen Zählung führen, wenn verwaiste Dokumente vorhanden sind oder wenn eine Chunk-Migration im Gange ist. Daher ist es sicherer, aggregate() zu verwenden Methode stattdessen:

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;