Worum es geht
In einer Suche kann ein parameter an zwei Stellen stehen. Beide sehen gleich aus, wirken aber auf ganz verschiedene Dinge:
{
"response": [
"companyname",
{
"field": "employees",
"response": ["firstname"],
"parameter": { "limit": 5, "order": [{ "field": "firstname", "order": "ASC" }] }
}
],
"parameter": {
"query": { "type": "AND", "filter": [{ "key": "city", "value": "Köln", "param": "EQ" }] },
"limit": 25
}
}
- bestimmt, welche Firmen Treffer sind
- hier: Firmen aus Köln, 25 pro Seite
- liefert
metamittotalCount
- bestimmt, welche Mitarbeiter in der Liste jeder Firma stehen
- hier: die ersten 5 nach Vornamen
- entfernt keine Firma aus den Treffern
- keine eigene
meta
Die zwei Fragen auseinanderhalten
| Frage | Wohin gehört der Filter? |
|---|---|
| Firmen, die einen Mitarbeiter namens Meier haben | oben, als Pfad employees.lastname oder mit MEMBEROF |
| alle Firmen, jeweils nur ihre Mitarbeiter namens Meier | innen, im parameter des Eintrags employees |
| Firmen mit einem Meier, und bei jeder nur die Meiers | oben und innen, derselbe Filter an beiden Stellen |
Filter oben über eine Liste: siehe Pfade und MEMBEROF.
Wie CDMS das ausführt
sequenceDiagram
participant C as Client
participant D as CDMS
participant DB as Datenbank
C->>D: POST /company/query
D->>DB: Firmen mit parameter oben (Köln, limit 25)
DB-->>D: 25 Firmen
loop für jede Firma
D->>DB: Mitarbeiter mit company.id = … UND parameter innen
DB-->>D: bis zu 5 Mitarbeiter
end
D-->>C: 25 Firmen, jede mit ihrer Liste
Den Filter company.id = … auf die jeweilige Firma ergänzt CDMS selbst. Mehr zum Ablauf unter Referenzen und Listen ausbauen.
Die Rechnung „25 × 500“
Wann: "parameter": { "limit": 5 } im Eintrag employees, oben limit 25
25 Firmen × höchstens 5 Mitarbeiter.
Ergebnis: höchstens 125 Mitarbeiter.
Wann: kein parameter im Eintrag, jede Firma hat 500 Mitarbeiter
25 Firmen × 500 Mitarbeiter, alle mit den angeforderten Feldern.
Ergebnis: 12 500 Mitarbeiter in einer Antwort.
Wann: kein limit oben, 2 000 Firmen, innen ohne limit
2 000 Firmen × 500 Mitarbeiter.
Ergebnis: 1 000 000 Mitarbeiter. Die Antwort wird sehr langsam oder scheitert.
Was der innere parameter kann
| Angabe | innen | Hinweis |
|---|---|---|
query | ja | wird mit UND an den Bezug zur Firma gehängt |
order | ja | Reihenfolge der Liste |
limit | ja | pro Firma |
page | ja | pro Firma, selten sinnvoll |
meta | nein | die Liste ist ein einfaches Array ohne totalCount |
Brauchst du die Anzahl der Mitarbeiter einer Firma, frag direkt POST /employee/query mit company.id = … und limit: 0, siehe Blättern und Trefferzahl.