@Override public CountOptions convert(Environment env, TraceInfo trace, Memory arg) throws Throwable { if (arg.isNull()) return null; ArrayMemory arr = arg.toValue(ArrayMemory.class); CountOptions options = new CountOptions(); if (arr.containsKey("skip")) options.skip(arg.valueOfIndex("skip").toInteger()); if (arr.containsKey("limit")) options.limit(arg.valueOfIndex("limit").toInteger()); if (arr.containsKey("maxTime")) { options.maxTime(WrapTimer.parsePeriod(arg.valueOfIndex("maxTime").toString()), TimeUnit.MILLISECONDS); } return options; }
@Test public void testQuerySkipLimitEmptyQuery() throws Exception { assertThat(collection.countDocuments(json(""), new CountOptions().skip(3))).isEqualTo(0); for (int i = 0; i < 10; i++) { collection.insertOne(json("")); } assertThat(collection.countDocuments(json(""), new CountOptions().skip(3))).isEqualTo(7); assertThat(collection.countDocuments(json(""), new CountOptions().skip(15))).isEqualTo(0); assertThat(collection.countDocuments(json(""), new CountOptions().skip(3).limit(5))).isEqualTo(5); }
@Test public void testQuerySkipLimitSimpleQuery() throws Exception { assertThat(collection.countDocuments(json("a: 1"), new CountOptions().skip(3))).isEqualTo(0); for (int i = 0; i < 10; i++) { collection.insertOne(json("a: 1")); } assertThat(collection.countDocuments(json("a: 1"), new CountOptions().skip(3))).isEqualTo(7); assertThat(collection.countDocuments(json("a: 1"), new CountOptions().skip(3).limit(5))).isEqualTo(5); assertThat(collection.countDocuments(json("a: 1"), new CountOptions().skip(15).limit(5))).isEqualTo(0); }
@Test @SuppressWarnings("deprecation") public void testCountCommandWithSkipAndLimit() { collection.insertOne(json("x: 1")); collection.insertOne(json("x: 1")); collection.insertOne(json("x: 2")); collection.insertOne(json("x: 1")); collection.insertOne(json("x: 2")); collection.insertOne(json("x: 1")); assertThat(collection.count(json("x: 1"), new CountOptions().skip(4).limit(2))).isEqualTo(0); assertThat(collection.count(json("x: 1"), new CountOptions().limit(3))).isEqualTo(3); assertThat(collection.count(json("x: 1"), new CountOptions().limit(10))).isEqualTo(4); assertThat(collection.count(json("x: 1"), new CountOptions().skip(1))).isEqualTo(3); }
@Override public Source<Long, NotUsed> count(final Query query) { checkNotNull(query, "query"); final BsonDocument queryFilter = getMongoFilter(query); log.debug("count with query filter <{}>.", queryFilter); final Bson filter = and(filterNotDeleted(), queryFilter); final CountOptions countOptions = new CountOptions() .skip(query.getSkip()) .limit(query.getLimit()) .maxTime(maxQueryTime.getSeconds(), TimeUnit.SECONDS); return Source.fromPublisher(collection.count(filter, countOptions)) .mapError(handleMongoExecutionTimeExceededException()) .log("count"); }
@Override public Source<Long, NotUsed> count(final Query query) { checkNotNull(query, "query"); final BsonDocument queryFilter = getMongoFilter(query); log.debug("count with query filter <{}>.", queryFilter); final Bson filter = and(filterNotDeleted(), queryFilter); final CountOptions countOptions = new CountOptions() .skip(query.getSkip()) .limit(query.getLimit()) .maxTime(maxQueryTime.getSeconds(), TimeUnit.SECONDS); return Source.fromPublisher(collection.count(filter, countOptions)) .mapError(handleMongoExecutionTimeExceededException()) .log("count"); }
option.skip(0).limit(countLimit); long countResults = collection.count(query, option);