We're updating the issue view to help you get more done. 

CQL filter OR operator does not work on attributes that are multiple on MongoDB DataSource

Description

I've created a collection with data from here (just two records), created 2dsphere index

Then I created a layer from that collection and tried to request it by WMS
with cql_filter in URL params.

1. when I use simple attributes (that are not multiple) in the filter all is
fine (points are visible):

  • filter: "contract.mail" ILIKE '%@mail.com%' OR "name" ILIKE '%station%'

  • mongo log: { ... , filter: { }, projection: { geometry: 1,
    contact.mail: 1, name: 1 }, ... }

 

2. when I use attributes that are multiple in the filter then it DOES NOT
work (there is no any point on received PNG):

  • filter: "measurements.name" ILIKE '%wind%' OR "measurements.unit" ILIKE
    '%c%'

  • mongo log: { ... , filter: { }, projection: {geometry: 1,
    measurements.unit: 1, measurements.name: 1}, ... }

 

3. when I change OR to AND in previous filter then it's works fine:

  • filter: "measurements.name" ILIKE '%wind%' AND "measurements.unit" ILIKE
    '%c%'

  • mongo log: { ..., filter: { $and: [ { measurements.name: /^.*wind.*$/i
    }, { measurements.unit: /^.*p.*$/i } ] }, projection: { geometry: 1 }, ... }

 

So I concluded that GeoServer does AND operation by sending filter to
mongoDB. And OR operation by itself requesting all records from collection.
But with attributes that are multiple something goes wrong.

Environment

windows 7
MongoDB 3.6

Status

Assignee

Unassigned

Reporter

Artem Groznykh

Triage

None

Components

Affects versions

21.2

Priority

Medium