@Override public Source<ResultList<String>, NotUsed> findAll(final PolicyRestrictedSearchAggregation aggregation) { checkNotNull(aggregation, "aggregation"); final Source<Document, NotUsed> source = aggregation.execute(collection, maxQueryTime); return source.map(doc -> doc.getString(PersistenceConstants.FIELD_ID)) .fold(new ArrayList<String>(), (list, id) -> { list.add(id); return list; }) .map(resultsPlus0ne -> toResultList(resultsPlus0ne, aggregation.getSkip(), aggregation.getLimit())) .mapError(handleMongoExecutionTimeExceededException()) .log("findAll"); }
@Override public Source<ResultList<String>, NotUsed> findAll(final PolicyRestrictedSearchAggregation aggregation) { checkNotNull(aggregation, "aggregation"); final Source<Document, NotUsed> source = aggregation.execute(collection, maxQueryTime); return source.map(doc -> doc.getString(PersistenceConstants.FIELD_ID)) .fold(new ArrayList<String>(), (list, id) -> { list.add(id); return list; }) .map(resultsPlus0ne -> toResultList(resultsPlus0ne, aggregation.getSkip(), aggregation.getLimit())) .mapError(handleMongoExecutionTimeExceededException()) .log("findAll"); }
@Override public Source<ResultList<String>, NotUsed> findAll(final Query query) { checkNotNull(query, "query"); final BsonDocument queryFilter = getMongoFilter(query); if (log.isDebugEnabled()) { log.debug("findAll with query filter <{}>.", queryFilter); } final Bson filter = and(filterNotDeleted(), queryFilter); final Optional<Bson> sortOptions = Optional.of(getMongoSort(query)); final int limit = query.getLimit(); final int skip = query.getSkip(); final Bson projection = new Document(PersistenceConstants.FIELD_ID, 1); return Source.fromPublisher(collection.find(filter, Document.class) .sort(sortOptions.orElse(null)) .limit(limit + 1) .skip(skip) .projection(projection) .maxTime(maxQueryTime.getSeconds(), TimeUnit.SECONDS) ) .map(doc -> doc.getString(PersistenceConstants.FIELD_ID)) .fold(new ArrayList<String>(), (list, id) -> { list.add(id); return list; }) .map(resultsPlus0ne -> toResultList(resultsPlus0ne, skip, limit)) .mapError(handleMongoExecutionTimeExceededException()) .log("findAll"); }
@Override public Source<ResultList<String>, NotUsed> findAll(final Query query) { checkNotNull(query, "query"); final BsonDocument queryFilter = getMongoFilter(query); if (log.isDebugEnabled()) { log.debug("findAll with query filter <{}>.", queryFilter); } final Bson filter = and(filterNotDeleted(), queryFilter); final Optional<Bson> sortOptions = Optional.of(getMongoSort(query)); final int limit = query.getLimit(); final int skip = query.getSkip(); final Bson projection = new Document(PersistenceConstants.FIELD_ID, 1); return Source.fromPublisher(collection.find(filter, Document.class) .sort(sortOptions.orElse(null)) .limit(limit + 1) .skip(skip) .projection(projection) .maxTime(maxQueryTime.getSeconds(), TimeUnit.SECONDS) ) .map(doc -> doc.getString(PersistenceConstants.FIELD_ID)) .fold(new ArrayList<String>(), (list, id) -> { list.add(id); return list; }) .map(resultsPlus0ne -> toResultList(resultsPlus0ne, skip, limit)) .mapError(handleMongoExecutionTimeExceededException()) .log("findAll"); }
@Override public Source<Long, NotUsed> count(final PolicyRestrictedSearchAggregation policyRestrictedSearchAggregation) { checkNotNull(policyRestrictedSearchAggregation, "policy restricted aggregation"); final Source<Document, NotUsed> source = policyRestrictedSearchAggregation.execute(collection, maxQueryTime); return source.map(doc -> doc.get(PersistenceConstants.COUNT_RESULT_NAME)) .map(countResult -> (Number) countResult) .map(Number::longValue) // use Number.longValue() to support both Integer and Long values .orElse(Source.<Long>single(0L)) .mapError(handleMongoExecutionTimeExceededException()) .log("count"); }
@Override public Source<Long, NotUsed> count(final PolicyRestrictedSearchAggregation policyRestrictedSearchAggregation) { checkNotNull(policyRestrictedSearchAggregation, "policy restricted aggregation"); final Source<Document, NotUsed> source = policyRestrictedSearchAggregation.execute(collection, maxQueryTime); return source.map(doc -> doc.get(PersistenceConstants.COUNT_RESULT_NAME)) .map(countResult -> (Number) countResult) .map(Number::longValue) // use Number.longValue() to support both Integer and Long values .orElse(Source.<Long>single(0L)) .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"); }
@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"); }