Worum es geht
Ein Filter besteht aus drei Teilen:
{ "key": "amount", "value": "10", "param": "SAMEORAFTER" }
| Teil | Bedeutung |
|---|---|
key | das Feld, auch über Beziehungen wie company.companyname, siehe Pfade |
value | der Vergleichswert, immer als Text, auch bei Zahlen und Datum |
param | der Operator: wie verglichen wird. Fehlt er, gilt LIKE |
Operatoren werden großgeschrieben. "eq" ist kein gültiger Operator.
Die Operatoren
| Operator | liest sich als | SQL (vereinfacht) | Beispiel |
|---|---|---|---|
EQ | gleich | = | { "key": "city", "value": "Köln", "param": "EQ" } |
NEQ | ungleich | <> | { "key": "status", "value": "CLOSED", "param": "NEQ" } |
LIKE | passt auf Muster | LIKE | { "key": "name", "value": "Muster%", "param": "LIKE" } |
IN | einer von | IN (…) | { "key": "amount", "value": "5,10,15", "param": "IN" } |
ISNULL | hat keinen Wert | IS NULL | { "key": "note", "param": "ISNULL" } |
ISNOTNULL | hat einen Wert | IS NOT NULL | { "key": "note", "param": "ISNOTNULL" } |
BEFORE | kleiner als, vor | < | { "key": "dueOn", "value": "2026-02-01", "param": "BEFORE" } |
SAMEORBEFORE | kleiner oder gleich | <= | { "key": "amount", "value": "10", "param": "SAMEORBEFORE" } |
AFTER | größer als, nach | > | { "key": "amount", "value": "10", "param": "AFTER" } |
SAMEORAFTER | größer oder gleich | >= | { "key": "dueOn", "value": "2026-02-01", "param": "SAMEORAFTER" } |
MEMBEROF | Liste enthält | EXISTS (…) | { "key": "employees", "value": "7f3…", "param": "MEMBEROF" } |
BEFORE, AFTER und ihre SAMEOR…-Varianten heißen zwar nach der Zeit, gelten aber genauso für Zahlen.
Welcher Operator für welches Feld?
| Text | Ganzzahl | Kommazahl | Ja/Nein | Datum, Zeit | ID | Aufzählung | Liste | Operator |
|---|---|---|---|---|---|---|---|---|
| ja | ja | ja | ja | ja | ja | ja | – | EQ, NEQ |
| ja | nein | nein | nein | nein | nein | nein | – | LIKE |
| ja | ja | ja | ja | ja | ja | ja | – | IN |
| nein | ja | ja | nein | ja | nein | nein | – | BEFORE, AFTER, SAMEORBEFORE, SAMEORAFTER |
| ja | ja | ja | ja | ja | ja | ja | – | ISNULL, ISNOTNULL |
| – | – | – | – | – | – | – | ja | MEMBEROF |
„Ganzzahl“ meint Felder vom Typ Integer und Long, „Kommazahl“ Felder vom Typ Double, Float und Decimal. „ID“ meint die id eines Objekts und Pfade wie company.id. ISNULL und ISNOTNULL funktionieren auch auf einer Einzelreferenz: { "key": "company", "param": "ISNULL" } findet alle Mitarbeiter ohne Firma.
Wie der Wert geschrieben wird
| Feldtyp | Schreibweise von value | Beispiel |
|---|---|---|
| Text | wie er ist | "Köln" |
| Ganzzahl | Ziffern | "10" |
| Kommazahl | mit Punkt | "2.5" |
| Ja/Nein | "true" oder "false" (Groß-/Kleinschreibung egal) | "true", "false" |
| Datum, Zeit | festes Format | "2026-02-10", "2026-02-10 08:00:00", siehe Datums- und Zeitwerte |
| ID | UUID | "7f3a…-…" |
| Aufzählung | Name des Werts | "OPEN" |
IN | Werte mit Komma, ohne Leerzeichen | "5,10,15" |
ISNULL, ISNOTNULL | kein Wert nötig | – |
Alle Operatoren im Ablauf
Wann: genau ein Wert, oder alles außer einem Wert
{ "key": "amount", "value": "10", "param": "EQ" } findet alle mit amount 10. NEQ findet alle anderen, aber nicht die ohne Wert: Ein leeres Feld ist in SQL weder gleich noch ungleich.
Ergebnis: Exakter Vergleich.
Wann: Textsuche mit Platzhaltern
CDMS ergänzt kein %. Alles dazu unter Suchmuster mit LIKE.
Ergebnis: Nur für Textfelder.
Wann: einer von mehreren Werten
{ "key": "label", "value": "Alpha,Beta", "param": "IN" }. Die Werte werden am Komma getrennt, Leerzeichen gehören zum Wert: "Alpha, Beta" sucht nach „Alpha“ und „ Beta“ (mit Leerzeichen).
Ergebnis: Treffer, deren Wert in der Liste steht.
Wann: Zahlen- und Datumsbereiche
Für einen Bereich kombinierst du zwei Filter in einer UND-Gruppe, z. B. SAMEORAFTER 2026-01-01 und BEFORE 2026-02-01 für „im Januar“.
Ergebnis: Werte in diesem Bereich.
Wann: Feld leer oder gefüllt
value wird nicht gebraucht. { "key": "note", "param": "ISNULL" } findet alle ohne Notiz.
Ergebnis: Leer heißt null in der Datenbank. Ein leerer Text "" ist nicht null.
Wann: „welche Firmen haben diesen Mitarbeiter?“
Nur für Listenfelder. Eigene Seite: Sammlungen durchsuchen mit MEMBEROF.
Ergebnis: Objekte, deren Liste den Wert enthält.
Wenn Operator und Feld nicht zusammenpassen
| Fall | Beispiel | Ergebnis |
|---|---|---|
| Vergleich auf Text oder Ja/Nein | label BEFORE Beta | 400 unsupported-operator|label|BEFORE |
| unbekanntes Feld | lable EQ Beta | 400 unknown-search-key|lable |
| unbekannter Aufzählungswert bei EQ/NEQ | type EQ BOSS | 400 wrong-value-in-where|type|BOSS |
| Ja/Nein mit anderem Wort | active EQ yes | 400 wrong-value-in-where|active|yes |
| LIKE auf Zahl | amount LIKE 1% | 400 like-needs-text|amount |
| Wert passt nicht zum Typ | amount EQ abc | 400 wrong-value-in-where|amount|abc |
| MEMBEROF auf Nicht-Liste | label MEMBEROF x | 400 memberof-needs-collection|label |
| Operator unbekannt oder kleingeschrieben | "param": "eq" | 400 invalid-value|parameter.query.filter[0].param |
Alle Fehlerfälle zusammen stehen unter Wenn ein Filter nicht passt.