Worum es geht
Eine Firma hat eine Liste employees. Du hast einen Mitarbeiter und willst wissen: In welchen Firmen steht er in der Liste? Bei n:m-Beziehungen, etwa Benutzer und Gruppen, kann das mehr als eine sein.
{ "key": "employees", "value": "7f3…", "param": "MEMBEROF" }
Das Mengenbild
flowchart LR
subgraph A["Firma Codamic"]
a1["Daniel 7f3…"]
a2["Eva 2c9…"]
end
subgraph B["Firma Acme"]
b1["Anna 8b1…"]
end
Q["employees MEMBEROF 7f3…"] -.->|"enthält Daniel"| A
Q -.->|"enthält Daniel nicht"| B
Ergebnis: nur „Codamic“.
Wie CDMS die Frage stellt
CDMS verbindet die Liste nicht mit der Hauptabfrage, sondern stellt für jedes Objekt eine eigene Ja/Nein-Frage an die Datenbank (EXISTS):
SELECT … FROM company c
WHERE EXISTS (SELECT 1 FROM c.employees m WHERE m.id = '7f3…')
Das hat zwei Folgen:
- Eine Firma erscheint genau einmal, und
totalCountstimmt. - Firmen ohne Mitarbeiter bleiben in der Suche, wenn eine andere Bedingung einer ODER-Gruppe sie trifft.
Alle Ausprägungen
Wann: Die Liste enthält Objekte (Referenzen), z. B. employees, roles, groups.
value ist die id des gesuchten Objekts: { "key": "employees", "value": "7f3…", "param": "MEMBEROF" }.
Ergebnis: Alle Objekte, deren Liste dieses Objekt enthält.
Wann: „Firmen mit Daniel oder Firmen namens Acme“
{ "type": "OR", "filter": [ { "key": "employees", "value": "7f3…", "param": "MEMBEROF" }, { "key": "companyname", "value": "Acme", "param": "EQ" } ] }
Ergebnis: Codamic und Acme, jede einmal.
Wann: { "key": "company", "value": "a1…", "param": "MEMBEROF" } auf employee, company ist aber eine Einzelreferenz.
-
1CDMSprüft, ob
companyeine Liste ist -
2CDMS→Clientnein → 400
memberof-needs-collection|company
Ergebnis: Für Einzelreferenzen nimmst du { "key": "company.id", "value": "a1…", "param": "EQ" }.
Wann: Liste von Objekten, aber value ist keine UUID, z. B. "xyz".
CDMS kann den Wert nicht als ID lesen.
Ergebnis: 400 wrong-uuid-in-where|xyz
MEMBEROF oder Pfad?
- prüft ein bestimmtes Objekt über seine
id - jedes Objekt höchstens einmal,
totalCountstimmt - funktioniert in ODER-Gruppen ohne Überraschung
- vergleicht ein Feld der Listeneinträge mit jedem Operator
- ein Objekt kommt einmal in
data totalCountzählt jeden passenden Listeneintrag, siehe Pfade