Adatok szűrése a GraphQL-ben (filter)

A szűrés a nagy adathalmazokat csak a szükséges rekordokra szűkíti. A GraphQL-ben a Data API Builder (DAB) egy strukturált argumentumot filter támogat az entitáslekérdezéseken. Minden szűrő paraméteres SQL-hez áll össze a biztonság és a konzisztencia érdekében.

Megjegyzés:

A GraphQL-szűrés támogatja az összehasonlítást, a logikai, a sztringmintát, a tagságot és a null operátorokat. A GraphQL-szűrők strukturált bemeneti objektumokat használnak: { fieldName: { operator: value } }. A dátumoknak érvényes ISO 8601 UTC-sztringeknek kell lenniük. Null értékű ellenőrzések használata isNull helyett eq null.

Gyors áttekintés

Operator Meaning
eq egyenlő
neq nem egyenlő
gt nagyobb mint
gte nagyobb vagy egyenlő
lt kevesebb, mint
lte kisebb vagy egyenlő
and logikai ÉS
or logikai VAGY
contains részszűrési egyezés
notContains nem részszűrési egyezés
startsWith előtag egyezése
endsWith utótagegyezés
in tagság
isNull null értékű ellenőrzés

eq

Egyenlő. Olyan rekordokat ad vissza, ahol egy mező értéke pontosan egyezik a megadott literállal, vagy null értékű, ha a függvényt használja isNull.

Megjegyzés:

Dátum- vagy dátum/idő mezők szűrésekor használjon nem kvótált ISO 8601 UTC formátumot (yyyy-MM-ddTHH:mm:ssZ). Az idézőjeles vagy OData-stílusú formátumok érvénytelenek.

  • Rossz: $filter=Date ge '2025-01-01'
  • Rossz: $filter=Date ge datetime'2025-01-01'
  • Helyes: $filter=Date ge 2025-01-01T00:00:00Z

Ebben a példában olyan könyveket kapunk, ahol a cím szerepel 'Dune', az elérhető jelző igaz, az ár 20, a közzétett dátum 2024. január 1. és az értékelés null.

query {
  books(filter: {
    and: [
      { title: { eq: "Dune" } }
      { available: { eq: true } }
      { price: { eq: 20 } }
      { publishedOn: { eq: "2024-01-01T00:00:00Z" } }
      { rating: { isNull: true } }
    ]
  }) {
    items { id title available price publishedOn rating }
  }
}

Fogalmi SQL

SELECT id, title, available, price, publishedOn, rating
FROM Books
WHERE title = 'Dune'
  AND available = 1
  AND price = 20
  AND publishedOn = '2024-01-01T00:00:00Z'
  AND rating IS NULL;

neq

Nem egyenlő. Olyan rekordokat ad vissza, ahol egy mező értéke nem egyezik meg a literálértékkel, vagy nem null értékű, ha az össze isNull: falsevan adva.

Ebben a példában olyan könyveket kapunk, ahol a cím nem 'Foundation'szerepel, az elérhető jelző nem hamis, az ár nem nulla, a közzétett dátum nem 2023. december 31. és az értékelés nem null.

query {
  books(filter: {
    and: [
      { title: { neq: "Foundation" } }
      { available: { neq: false } }
      { price: { neq: 0 } }
      { publishedOn: { neq: "2023-12-31T00:00:00Z" } }
      { rating: { isNull: false } }
    ]
  }) {
    items { id title available price publishedOn rating }
  }
}

Fogalmi SQL

SELECT id, title, available, price, publishedOn, rating
FROM Books
WHERE title <> 'Foundation'
  AND available <> 0
  AND price <> 0
  AND publishedOn <> '2023-12-31T00:00:00Z'
  AND rating IS NOT NULL;

gt

Nagyobb, mint. Olyan rekordokat ad vissza, ahol egy mező értéke szigorúan magasabb a megadott literálnál.

Ebben a példában olyan könyveket kapunk, amelyek címe betűrendbe 'A'van rendezve, a rendelkezésre álló jelző igaz, az ár nagyobb, mint 10, a közzétett dátum pedig 2020. január 1. után van.

query {
  books(filter: {
    and: [
      { title: { gt: "A" } }
      { available: { gt: false } }
      { price: { gt: 10 } }
      { publishedOn: { gt: "2020-01-01T00:00:00Z" } }
    ]
  }) {
    items { id title available price publishedOn }
  }
}

Fogalmi SQL

SELECT id, title, available, price, publishedOn
FROM Books
WHERE title > 'A'
  AND available > 0
  AND price > 10
  AND publishedOn > '2020-01-01T00:00:00Z';

gte

Nagyobb vagy egyenlő. Olyan rekordokat ad vissza, ahol egy mező értéke nagyobb vagy egyenlő a megadott literálértéknél.

Ebben a példában olyan könyveket kapunk, amelyeknek a 'A' címe vagy későbbi, az elérhető jelző igaz, az ár legalább 10, a közzétett dátum pedig 2020. január 1-jén vagy azt követően van.

query {
  books(filter: {
    and: [
      { title: { gte: "A" } }
      { available: { gte: false } }
      { price: { gte: 10 } }
      { publishedOn: { gte: "2020-01-01T00:00:00Z" } }
    ]
  }) {
    items { id title available price publishedOn }
  }
}

Fogalmi SQL

SELECT id, title, available, price, publishedOn
FROM Books
WHERE title >= 'A'
  AND available >= 0
  AND price >= 10
  AND publishedOn >= '2020-01-01T00:00:00Z';

lt

Kevesebb, mint. Olyan rekordokat ad vissza, ahol egy mező értéke szigorúan alacsonyabb, mint a megadott literál.

Ebben a példában olyan könyveket kapunk, amelyeknek a címe korábban 'Z'rendezve van, a rendelkezésre álló jelző hamis, az ár kisebb, mint 50, a közzétett dátum pedig 2030. január 1. előtt van.

query {
  books(filter: {
    and: [
      { title: { lt: "Z" } }
      { available: { lt: true } }
      { price: { lt: 50 } }
      { publishedOn: { lt: "2030-01-01T00:00:00Z" } }
    ]
  }) {
    items { id title available price publishedOn }
  }
}

Fogalmi SQL

SELECT id, title, available, price, publishedOn
FROM Books
WHERE title < 'Z'
  AND available < 1
  AND price < 50
  AND publishedOn < '2030-01-01T00:00:00Z';

lte

Kisebb vagy egyenlő. Olyan rekordokat ad vissza, ahol egy mező értéke kisebb vagy egyenlő az adott literálénál.

Ebben a példában olyan könyveket kapunk, amelyeknek a címe előtt vagy azzal egyenlő 'Z', az elérhető jelző igaz, az ár 100 vagy kevesebb, a közzétett dátum pedig 2030. január 1-jén vagy azt megelőzően van.

query {
  books(filter: {
    and: [
      { title: { lte: "Z" } }
      { available: { lte: true } }
      { price: { lte: 100 } }
      { publishedOn: { lte: "2030-01-01T00:00:00Z" } }
    ]
  }) {
    items { id title available price publishedOn }
  }
}

Fogalmi SQL

SELECT id, title, available, price, publishedOn
FROM Books
WHERE title <= 'Z'
  AND available <= 1
  AND price <= 100
  AND publishedOn <= '2030-01-01T00:00:00Z';

and

Logikai ÉS. Több olyan predikátumot egyesít, amelyeknek mind igaznak kell lenniük ahhoz, hogy egy rekord egyezzen.

Ebben a példában olyan könyveket kapunk, amelyek 30-nál kevesebbe kerülnek, és 2022. január 1. után jelentek meg.

query {
  books(filter: {
    and: [
      { available: { eq: true } }
      { price: { lt: 30 } }
      { publishedOn: { gt: "2022-01-01T00:00:00Z" } }
    ]
  }) {
    items { id title available price publishedOn }
  }
}

Fogalmi SQL

SELECT id, title, available, price, publishedOn
FROM Books
WHERE available = 1
  AND price < 30
  AND publishedOn > '2022-01-01T00:00:00Z';

or

Logikai VAGY. Olyan rekordokat ad vissza, ahol a tömb legalább egy predikátuma igaz értéket ad vissza.

Ebben a példában olyan könyveket kapunk, amelyek nincsenek raktáron, vagy 50 felett vannak.

query {
  books(filter: {
    or: [
      { available: { eq: false } }
      { price: { gt: 50 } }
    ]
  }) {
    items { id title available price }
  }
}

Fogalmi SQL

SELECT id, title, available, price
FROM Books
WHERE available = 0
   OR price > 50;

contains

Részszűrési egyezés. Olyan rekordokat ad vissza, amelyekben a mező a megadott részszűrést tartalmazza (a kis- és nagybetűk érzékenysége az adatbázis rendezésétől függ).

Ebben a példában olyan könyveket kapunk, amelyeknek a címe tartalmazza a "Dűne" szót.

query {
  books(filter: { title: { contains: "Dune" } }) {
    items { id title }
  }
}

Fogalmi SQL

SELECT id, title
FROM Books
WHERE title LIKE '%Dune%';

notContains

Negatív részszűrési egyezés. Olyan rekordokat ad vissza, amelyekben a mező nem tartalmazza a megadott részszűrést.

Ebben a példában olyan könyveket kapunk, amelyeknek a címe nem tartalmazza az "Útmutató" szöveget.

query {
  books(filter: { title: { notContains: "Guide" } }) {
    items { id title }
  }
}

Fogalmi SQL

SELECT id, title
FROM Books
WHERE title NOT LIKE '%Guide%';

startsWith

Az előtag egyezik. Azokat a rekordokat adja vissza, ahol a mező a megadott sztringgel kezdődik.

Ebben a példában olyan könyveket kapunk, amelyeknek a címe "The" (A) címmel kezdődik.

query {
  books(filter: { title: { startsWith: "The" } }) {
    items { id title }
  }
}

Fogalmi SQL

SELECT id, title
FROM Books
WHERE title LIKE 'The%';

endsWith

Utótag egyezik. Olyan rekordokat ad vissza, ahol a mező a megadott sztringgel végződik.

Ebben a példában olyan könyveket kapunk, amelyeknek a címe "Krónikák" lesz.

query {
  books(filter: { title: { endsWith: "Chronicles" } }) {
    items { id title }
  }
}

Fogalmi SQL

SELECT id, title
FROM Books
WHERE title LIKE '%Chronicles';

in

Tagsági egyezés. Olyan rekordokat ad vissza, ahol a mező értéke szerepel a megadott listában.

Ebben a példában olyan könyveket kapunk, amelyek műfaja "SciFi" vagy "Fantasy".

query {
  books(filter: { genre: { in: ["SciFi", "Fantasy"] } }) {
    items { id title genre }
  }
}

Fogalmi SQL

SELECT id, title, genre
FROM Books
WHERE genre IN ('SciFi', 'Fantasy');

isNull

Null értékű ellenőrzés. Olyan rekordokat ad vissza, amelyekben egy mező értéke null vagy nem null a logikai literáltól függően.

Ebben a példában olyan könyveket kapunk, ahol az értékelés null.

query {
  books(filter: { rating: { isNull: true } }) {
    items { id title rating }
  }
}

Fogalmi SQL

SELECT id, title, rating
FROM Books
WHERE rating IS NULL;

Konfigurációs példa

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

Lásd még

Concept REST GraphQL Cél
Projection $select Elemek Adja meg, hogy mely mezőket adja vissza
Filtering $filter szűrő Sorok korlátozása feltétel szerint
Rendezés $orderby orderBy Rendezési sorrend meghatározása
Oldalméret $first first Az elemek számának korlátozása oldalanként
Folytatás $after után Folytatás az utolsó oldalról kurzor használatával

Megjegyzés:

A REST-kulcsszavak az OData-konvenciók követésével $kezdődnek.