MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Contar resultados com o driver Java do MongoDB 3.0


Use o count() do MongoCollection método, aplicando um filtro de consulta que faz uso do objeto Datetime do Joda-Time biblioteca que simplifica a manipulação de datas em java. Você pode verificar isso aqui . Basicamente, crie um objeto datetime a 15 minutos da hora atual:
DateTime dt = new DateTime();
DateTime now = new DateTime();
DateTime subtracted = dt.minusMinutes(15);

Em seguida, use as variáveis ​​para construir uma consulta de intervalo de datas para uso no 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);

Em um cluster fragmentado, o db.collection.count() subjacente O método pode resultar em uma contagem imprecisa se existirem documentos órfãos ou se uma migração de fragmentos estiver em andamento. Portanto, é mais seguro usar aggregate() método em vez disso:
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;