Example usage for com.mongodb.client.model Filters and

List of usage examples for com.mongodb.client.model Filters and

Introduction

In this page you can find the example usage for com.mongodb.client.model Filters and.

Prototype

public static Bson and(final Bson... filters) 

Source Link

Document

Creates a filter that performs a logical AND of the provided list of filters.

Usage

From source file:com.dydabo.blackbox.mongodb.tasks.MongoRangeSearchTask.java

License:Apache License

@Override
protected List<T> compute() {

    List<T> results = new ArrayList<>();

    GenericDBTableRow startTableRow = utils.convertRowToTableRow(startRow);
    GenericDBTableRow endTableRow = utils.convertRowToTableRow(endRow);
    List<Bson> filterList = new ArrayList<>();

    startTableRow.forEach((familyName, columnName, columnValue, columnValueAsString) -> {
        if (DyDaBoUtils.isValidRegex(columnValueAsString)) {
            if (DyDaBoUtils.isNumber(columnValue)) {
                filterList.add(Filters.gte(columnName, columnValue));
            } else {
                if (DyDaBoUtils.isARegex(columnValueAsString)) {
                    filterList.add(Filters.regex(columnName, columnValueAsString));
                } else {
                    filterList.add(Filters.gte(columnName, columnValueAsString));
                }/*  ww w.  j av  a  2s.  co  m*/
            }
        }
    });

    endTableRow.forEach((familyName, columnName, columnValue, columnValueAsString) -> {
        if (DyDaBoUtils.isValidRegex(columnValueAsString)) {
            if (DyDaBoUtils.isNumber(columnValue)) {
                filterList.add(Filters.lt(columnName, columnValue));
            } else {
                if (DyDaBoUtils.isARegex(columnValueAsString)) {
                    filterList.add(Filters.regex(columnName, columnValueAsString));
                } else {
                    filterList.add(Filters.lt(columnName, columnValueAsString));
                }
            }
        }
    });

    String type = startRow.getClass().getTypeName();

    Block<Document> addToResultBlock = (Document doc) -> {
        T resultObject = new Gson().fromJson(doc.toJson(), (Type) startRow.getClass());
        if (resultObject != null) {
            results.add(resultObject);
        }
    };

    logger.finest("Filters :" + filterList);
    filterList.add(Filters.regex(MongoUtils.PRIMARYKEY, type + ":.*"));
    if (filterList.size() > 0) {
        collection.find(Filters.and(filterList)).forEach(addToResultBlock);
    } else {
        collection.find().forEach(addToResultBlock);
    }

    return results;
}

From source file:com.dydabo.blackbox.mongodb.tasks.MongoSearchTask.java

License:Apache License

private List<T> search(T row) {
    List<T> results = new ArrayList<>();
    String type = row.getClass().getTypeName();
    Block<Document> addToResultBlock = (Document doc) -> {
        T resultObject = new Gson().fromJson(doc.toJson(), (Type) row.getClass());
        if (resultObject != null) {
            if (maxResult <= 0) {
                results.add(resultObject);
            } else if (results.size() < maxResult) {
                results.add(resultObject);
            }//www  . jav  a2 s  .c o m
        }
    };

    GenericDBTableRow tableRow = utils.convertRowToTableRow(row);

    List<Bson> filterList = parseFilters(tableRow);
    filterList.add(Filters.regex(MongoUtils.PRIMARYKEY, type + ":.*"));

    logger.finest("Mongo Filter:" + filterList);
    if (filterList.size() > 0) {
        collection.find(Filters.and(filterList)).forEach(addToResultBlock);
    }

    return results;
}

From source file:com.epam.dlab.backendapi.dao.azure.AzureBillingDAO.java

License:Apache License

public Document getReport(UserInfo userInfo, AzureBillingFilter filter) {

    boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE,
            "/api/infrastructure_provision/billing");
    if (isFullReport) {
        if (filter.getUser() != null) {
            filter.getUser().replaceAll(String::toLowerCase);
        }//from www. java2s. c om
    } else {
        filter.setUser(Lists.newArrayList(userInfo.getName().toLowerCase()));
    }

    List<Bson> matchCriteria = matchCriteria(filter);
    List<Bson> pipeline = new ArrayList<>();
    if (!matchCriteria.isEmpty()) {
        pipeline.add(Aggregates.match(Filters.and(matchCriteria)));
    }
    pipeline.add(groupCriteria());
    pipeline.add(sortCriteria());

    return prepareReport(filter.getStatuses(), filter.getNodeSize() != null && !filter.getNodeSize().isEmpty(),
            getCollection(MongoKeyWords.BILLING_DETAILS).aggregate(pipeline), getShapes(filter.getNodeSize()))
                    .append(FULL_REPORT, isFullReport);
}

From source file:com.github.cherimojava.data.mongo.query.QueryInvocationHandler.java

License:Apache License

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    String methodName = method.getName();
    switch (methodName) {
    case "e":
        // this is just a handout for the entity to get knowledge of what to check
        return this.entityProxy.get();
    case "where":/* fallthrough */
    case "and":
        return this.specifier.get();
    case "iterator":
        FindIterable it = coll.find(Filters.and(filters.toArray(new Bson[] {})));
        if (limit != null) {
            it.limit(limit);/*ww  w . j ava  2s . c om*/
        }
        if (skip != null) {
            it.skip(skip);
        }
        if (sorts.size() > 0) {
            it.sort(Sorts.orderBy(sorts));
        }
        return it.iterator();
    case "count":
        return coll.count(Filters.and(filters.toArray(new Bson[] {})));
    case "limit":
        limit = (Integer) args[0];
        return queryEnd.get();
    case "skip":
        skip = (Integer) args[0];
        return queryEnd.get();
    case "sort":
        checkState(!sortSet, "Sorting can be specified only once");
        sortSet = true;
        return querySort.get();
    case "desc":/* fallthrough */
    case "asc":
        return addSortInformation("asc".equals(methodName));
    case "by":
        return addSortInformation(args[0] == QuerySort.Sort.ASC);
    }
    throw new IllegalStateException("Unknown method found: " + methodName);
}

From source file:com.kaibla.hamster.persistence.query.And.java

@Override
public Bson buildQuery() {
    ArrayList<Bson> filters = new ArrayList(conditions.size());
    for (Condition c : conditions) {
        filters.add(c.buildQuery());//from  ww w  .j a va 2  s  .c o m
    }
    return Filters.and(filters);
}

From source file:com.kaibla.hamster.persistence.query.And.java

@Override
public Bson buildShadowQuery() {
    ArrayList<Bson> filters = new ArrayList(conditions.size());
    for (Condition c : conditions) {
        filters.add(c.buildShadowQuery());
    }//from w w  w  .  j a  v  a2s  .c  o  m
    return Filters.and(filters);
}

From source file:com.px100systems.data.plugin.storage.mongo.FilterQueryBuilder.java

License:Open Source License

@Override
public Bson convert(and predicate) {
    List<Bson> q = new ArrayList<>();
    for (Criteria c : predicate.getMembers())
        q.add(c.convert(this));
    return Filters.and(q);
}

From source file:com.streamsets.pipeline.stage.origin.mongodb.oplog.MongoDBOplogSource.java

License:Apache License

private void prepareCursor(int timestampSeconds, int ordinal, List<OplogOpType> filterOplogTypes,
        int batchSize) {
    LOG.debug("Getting new cursor with offset - TimeStampInSeconds:'{}', Ordinal : '{}' and Batch Size : '{}'",
            timestampSeconds, ordinal, batchSize);
    FindIterable<Document> mongoCursorIterable = mongoCollection.find()
            //As the collection is a capped collection we use Tailable cursor which will return results in natural order in this case
            //based on ts timestamp field.
            //Tailable Await does not return and blocks, so we are using tailable.
            .cursorType(CursorType.Tailable).batchSize(batchSize);

    List<Bson> andFilters = new ArrayList<>();
    //Only filter if we already have saved/initial offset specified or else both time_t and ordinal will not be -1.
    if (timestampSeconds > 0 && ordinal >= 0) {
        andFilters.add(Filters.gt(TIMESTAMP_FIELD, new BsonTimestamp(timestampSeconds, ordinal)));
    }//from www  .  ja  v  a 2 s .co m

    if (!filterOplogTypes.isEmpty()) {
        List<Bson> oplogOptypeFilters = new ArrayList<>();
        Set<OplogOpType> oplogOpTypesSet = new HashSet<>();
        for (OplogOpType filterOplogopType : filterOplogTypes) {
            if (oplogOpTypesSet.add(filterOplogopType)) {
                oplogOptypeFilters.add(Filters.eq(OP_TYPE_FIELD, filterOplogopType.getOp()));
            }
        }
        //Add an or filter for filtered Or Types
        andFilters.add(Filters.or(oplogOptypeFilters));
    }
    //Finally and timestamp with oplog filters
    if (!andFilters.isEmpty()) {
        mongoCursorIterable = mongoCursorIterable.filter(Filters.and(andFilters));
    }
    cursor = mongoCursorIterable.iterator();
}

From source file:io.lumeer.storage.mongodb.dao.collection.MongoDataDao.java

License:Open Source License

private Bson createFilter(String collectionId, SearchQuery query) {
    List<Bson> filters = new ArrayList<>();
    // does not work as expected - cannot search for a single character for example, only whole words
    if (query.isFulltextQuery()) {

        Collection collection = collectionDao.getCollectionById(collectionId);
        List<Attribute> fulltextAttrs = collection.getAttributes().stream()
                .filter(attr -> attr.getName().toLowerCase().contains(query.getFulltext().toLowerCase()))
                .collect(Collectors.toList());

        // we only search by presence of the matching attributes
        if (fulltextAttrs.size() > 0) {
            filters.add(Filters.or(fulltextAttrs.stream().map(attr -> Filters.exists(attr.getId()))
                    .collect(Collectors.toList())));
        } else if (collection.getAttributes().size() > 0) { // we search by content
            filters.add(Filters.or(collection.getAttributes().stream()
                    .map(attr -> Filters.regex(attr.getId(), query.getFulltext(), "i"))
                    .collect(Collectors.toList())));
        }//from w  w  w .  java 2 s.  c o  m
    }
    if (query.isDocumentIdsQuery()) {
        List<ObjectId> ids = query.getDocumentIds().stream().filter(ObjectId::isValid).map(ObjectId::new)
                .collect(Collectors.toList());
        if (!ids.isEmpty()) {
            filters.add(Filters.in(ID, ids));
        }
    }
    if (query.isFiltersQuery()) {
        List<Bson> attributeFilters = query.getFilters().stream().map(this::attributeFilter)
                .filter(Objects::nonNull).collect(Collectors.toList());
        filters.addAll(attributeFilters);
    }

    final Bson result = filters.size() > 0 ? Filters.and(filters) : new Document();
    return result;
}

From source file:io.lumeer.storage.mongodb.dao.project.MongoViewDao.java

License:Open Source License

private static Bson viewSearchFilter(SearchQuery query) {
    List<Bson> filters = new ArrayList<>();
    if (query.isCollectionIdsQuery()) {
        filters.add(Filters.in(MongoUtils.concatParams(ViewCodec.QUERY, QueryCodec.COLLECTION_IDS),
                query.getCollectionIds()));
    }//www  .  j a v a 2s .co m
    if (query.isFulltextQuery()) {
        filters.add(
                Filters.regex(ViewCodec.NAME, Pattern.compile(query.getFulltext(), Pattern.CASE_INSENSITIVE)));
    }
    filters.add(MongoFilters.permissionsFilter(query));

    return Filters.and(filters);
}