Vai al contenuto

Filters

Filter types

The MongoDB Reader service allows two type of data filtering to be embedded in custom profiles:

  • Static filtering
  • Dynamic filtering

Static filtering

Static filtering can be achieved by inserting ##paramName## tags into the profile query; query string and path parameters are interpolated before processing the query. Notes: - this filter strategy is only available when using aggregationFilePath; - all tags you define are required, if some query string is missing a 500 status code is returned; - if you need to interpolate numbers you have to omit the double quotes in your JSON file (leading to a syntactically wrong file)

Dynamic filtering

Dynamic filtering (available since v1.3.0) can be implemented with the #matchWithFilters# operator; you can use this filtering strategy with both aggregationFilePath and aggregationFunction and it will be substituted with a $match operator containing all the properties that match requiredParameters list. Values from the query string input are interpolated into the query property and the property gets inserted into the $match operator.

Notes: * parameters to be interpolated in the query must be provided wrapped in single # as in #paramName#. It's different from what you specify for static filtering to avoid interpolation conflicts; * the #matchWithFilters# operator should be used as the single key inside a pipeline stage as you'd normally do with mongodb aggregation stages.

Sample configuration:

[
    { ...some pipeline stages },
    {
        "#matchWithFilters#": [
            {
                "requiredParameters": ["minValue", "maxValue"],
                "query": {
                    "total": { "$lte": "#maxValue#", "$gte": "#minValue#" }
                }
            }
        ]
    },
    { ...some pipeline stages }
]

will lead to (assuming both minValue and maxValue query string are provided)

[
    { ...some pipeline stages },
    {
        "$match": {
            "total": { "$lte": "#maxValue#", "$gte": "#minValue#" }
        }
    },
    { ...some pipeline stages }
]