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

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

Introduction

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

Prototype

public static Bson regex(final String fieldName, final String pattern, @Nullable final String options) 

Source Link

Document

Creates a filter that matches all documents where the value of the field matches the given regular expression pattern with the given options applied.

Usage

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

License:Open Source License

@Override
public Bson convert(icontainsText predicate) {
    return Filters.regex(predicate.getMember(), ".*" + Pattern.quote(predicate.getText()) + ".*", "i");
}

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())));
        }//w w w.  j  av a2s .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:org.eclipse.ditto.services.thingsearch.persistence.read.criteria.visitors.CreateBsonPredicateVisitor.java

License:Open Source License

@Override
public Function<String, Bson> visitLike(final String value) {
    // remove leading or trailing wildcard because queries like /^a/ are much faster than /^a.*$/ or /^a.*/
    // from mongodb docs:
    // "Additionally, while /^a/, /^a.*/, and /^a.*$/ match equivalent strings, they have different performance
    // characteristics. All of these expressions use an index if an appropriate index exists;
    // however, /^a.*/, and /^a.*$/ are slower. /^a/ can stop scanning after matching the prefix."
    final String valueWithoutLeadingOrTrailingWildcard = removeLeadingOrTrailingWildcard(value);
    return fieldName -> Filters.regex(fieldName, valueWithoutLeadingOrTrailingWildcard, "");
}

From source file:org.opencb.commons.datastore.mongodb.MongoDBQueryUtils.java

License:Apache License

public static <T> Bson createFilter(String mongoDbField, T queryValue, ComparisonOperator comparator) {
    Bson filter = null;/*from  w ww . j  av  a  2s . c om*/

    if (queryValue != null) {
        if (queryValue instanceof String) {
            switch (comparator) {
            case EQUALS:
                filter = Filters.eq(mongoDbField, queryValue);
                break;
            case NOT_EQUALS:
                filter = Filters.ne(mongoDbField, queryValue);
                break;
            case EQUAL_IGNORE_CASE:
                filter = Filters.regex(mongoDbField, queryValue.toString(), "i");
                break;
            case STARTS_WITH:
                filter = Filters.regex(mongoDbField, "^" + queryValue + "*");
                break;
            case ENDS_WITH:
                filter = Filters.regex(mongoDbField, "*" + queryValue + "$");
                break;
            case REGEX:
                filter = Filters.regex(mongoDbField, queryValue.toString());
                break;
            case TEXT:
                filter = Filters.text(String.valueOf(queryValue));
                break;
            default:
                break;
            }
        } else {
            switch (comparator) {
            case EQUALS:
                filter = Filters.eq(mongoDbField, queryValue);
                break;
            case NOT_EQUALS:
                filter = Filters.ne(mongoDbField, queryValue);
                break;
            case GREATER_THAN:
                filter = Filters.gt(mongoDbField, queryValue);
                break;
            case GREATER_THAN_EQUAL:
                filter = Filters.gte(mongoDbField, queryValue);
                break;
            case LESS_THAN:
                filter = Filters.lt(mongoDbField, queryValue);
                break;
            case LESS_THAN_EQUAL:
                filter = Filters.lte(mongoDbField, queryValue);
                break;
            default:
                break;
            }
        }
    }
    return filter;
}