@Override public Boolean doInCollection(MongoCollection<Document> collection) throws MongoException, DataAccessException { return doCount(collection.getNamespace().getCollectionName(), mappedQuery, new CountOptions().limit(1).collation(collation)) > 0; } }
@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; }
@Override public Boolean doInCollection(MongoCollection<Document> collection) throws MongoException, DataAccessException { return doCount(collection.getNamespace().getCollectionName(), mappedQuery, new CountOptions().limit(1).collation(collation)) > 0; } }
@Test public void testQueryLimitSimpleQuery() throws Exception { for (int i = 0; i < 5; i++) { collection.insertOne(json("a: 1")); } assertThat(collection.countDocuments(json("a: 1"), new CountOptions().limit(1))).isEqualTo(1); assertThat(collection.countDocuments(json("a: 1"), new CountOptions().limit(-1))).isEqualTo(5); assertThat(collection.countDocuments(json("a: 1"))).isEqualTo(5); }
@Test public void testQueryLimitEmptyQuery() throws Exception { for (int i = 0; i < 5; i++) { collection.insertOne(json("")); } assertThat(collection.countDocuments(json(""), new CountOptions().limit(1))).isEqualTo(1); assertThat(collection.countDocuments(json(""), new CountOptions().limit(-1))).isEqualTo(5); assertThat(collection.countDocuments(json(""))).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); }
@Override public boolean isQueueEmpty() { return (int) collRefs.count(eq(IMongoSerializer.FIELD_STAGE, Stage.QUEUED.name()), new CountOptions().limit(1)) == 0; }
@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 @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"); }
totalSize = -1; // unknown due to manual projection } else { totalSize = coll.count(filter, new CountOptions().limit(countUpTo + 1));
@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);
@Override public boolean metaClassFor(Id id, ClassBean metaClass) { checkNotNull(id, "id"); checkNotNull(metaClass, "metaClass"); final String ownerId = idConverter.convert(id); final ClassDocument newMetaClass = ClassDocument.fromBean(metaClass); final Bson filter = eq(ModelDocument.F_ID, ownerId); final Bson existsFilter = and(filter, exists(ModelDocument.F_METACLASS)); final boolean notExists = documents.countDocuments(existsFilter, new CountOptions().limit(1)) == 0; if (notExists) { final Bson update = combine( setOnInsert(concat(ModelDocument.F_METACLASS, ClassDocument.F_NAME), newMetaClass.getName()), setOnInsert(concat(ModelDocument.F_METACLASS, ClassDocument.F_URI), newMetaClass.getUri()) ); documents.updateOne(filter, update, new UpdateOptions().upsert(true)); } return notExists; }