MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Compter les résultats avec le pilote Java MongoDB 3.0

Utilisez count() de MongoCollection méthode, en appliquant un filtre de requête qui utilise l'objet Datetime du Joda-Time bibliothèque qui simplifie la manipulation des dates en java. Vous pouvez vérifier cela ici . Créez en gros un objet datetime à 15 minutes de l'heure actuelle :

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

Utilisez ensuite les variables pour construire une requête de plage de dates à utiliser dans la méthode 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);

Sur un cluster partitionné, le sous-jacent db.collection.count() La méthode peut entraîner un décompte inexact si des documents orphelins existent ou si une migration de bloc est en cours. Il est donc plus sûr d'utiliser aggregate() méthode à la place :

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;