Sdílet prostřednictvím


Filtrování dat v GraphQL (filter)

Filtrování zužuje velké datové sady jenom na záznamy, které potřebujete. Tvůrce rozhraní DATA API (DAB) v GraphQL podporuje strukturovaný filter argument dotazů na entity. Každý filtr se zkompiluje do parametrizovaného SQL pro zajištění bezpečnosti a konzistence.

Poznámka:

Filtrování GraphQL podporuje porovnání, logický vzor, vzorec řetězce, členství a operátory null. Filtry GraphQL používají strukturované vstupní objekty: { fieldName: { operator: value } }. Kalendářní data musí být platná řetězce ISO 8601 UTC. Hodnoty null se používají isNull místo eq null.

Rychlý přehled

Operator Meaning
eq rovný
neq není rovno
gt větší než
gte větší než nebo rovno
lt méně než
lte menší než nebo rovno
and logický operátor AND
or logický operátor OR
contains Shoda podřetěžce
notContains neodpovídá podřetěžci
startsWith shoda předpony
endsWith Shoda přípony
in členství
isNull Kontrola null

eq

Rovná se. Vrátí záznamy, ve kterých hodnota pole přesně odpovídá zadanému literálu nebo má hodnotu null, pokud používáte isNull.

Poznámka:

Při filtrování podle polí data nebo data a času použijte necitovaný formát ISO 8601 UTC (yyyy-MM-ddTHH:mm:ssZ). Formáty ve stylu quoted nebo OData jsou neplatné.

  • Nesprávný: $filter=Date ge '2025-01-01'
  • Nesprávný: $filter=Date ge datetime'2025-01-01'
  • Správně: $filter=Date ge 2025-01-01T00:00:00Z

V tomto příkladu získáváme knihy, kde je 'Dune'název , dostupný příznak je pravdivý, cena je 20, datum publikování je 1. ledna 2024 a hodnocení má hodnotu 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 }
  }
}

Koncepční 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

Nerovná se. Vrátí záznamy, ve kterých hodnota pole neodpovídá literálu nebo není null v kombinaci s isNull: false.

V tomto příkladu dostáváme knihy, kde název není 'Foundation', dostupný příznak není false, cena není nula, datum publikování není 31. prosince 2023 a hodnocení nemá hodnotu 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 }
  }
}

Koncepční 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

Větší než. Vrátí záznamy, ve kterých je hodnota pole přísně vyšší než zadaný literál.

V tomto příkladu dostáváme knihy, jejichž název seřadí abecedně po 'A', dostupný příznak je pravdivý, cena je větší než 10 a datum publikování je po 1. lednu 2020.

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 }
  }
}

Koncepční 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

Větší než nebo rovno. Vrátí záznamy, ve kterých je hodnota pole vyšší nebo rovna danému literálu.

V tomto příkladu dostáváme knihy, jejichž název je 'A' nebo novější, dostupný příznak je pravdivý, cena je aspoň 10 a datum publikování je 1. ledna 2020 nebo po 1. lednu 2020.

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 }
  }
}

Koncepční 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

Méně než. Vrátí záznamy, ve kterých je hodnota pole přísně nižší než daný literál.

V tomto příkladu dostáváme knihy, jejichž název seřadí před 'Z', dostupný příznak je false, cena je menší než 50 a datum publikování je před 1. lednem 2030.

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 }
  }
}

Koncepční 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

Menší než nebo rovno. Vrátí záznamy, ve kterých je hodnota pole nižší nebo rovna danému literálu.

V tomto příkladu dostáváme knihy, jejichž nadpis seřadí před nebo rovnou 'Z', dostupný příznak je pravdivý, cena je 100 nebo méně a publikované datum je dne nebo před 1. lednem 2030.

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 }
  }
}

Koncepční 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

Logický operátor AND. Kombinuje více predikátů, které musí být splněny pro záznam, aby se shodovaly.

V tomto příkladu dostáváme knihy, které jsou k dispozici, stojí méně než 30 a byly publikovány po 1. lednu 2022.

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

Koncepční SQL

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

or

Logický operátor OR. Vrátí záznamy, ve kterých se v poli vyhodnotí alespoň jeden predikát.

V tomto příkladu dostáváme knihy, které jsou buď z zásob, nebo jsou ceny vyšší než 50.

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

Koncepční SQL

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

contains

Shoda podřetětěce. Vrátí záznamy, ve kterých pole obsahuje zadaný podřetětěr (citlivost písmen závisí na kolaci databáze).

V tomto příkladu dostáváme knihy, jejichž název obsahuje slovo "Dune".

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

Koncepční SQL

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

notContains

Shoda s negativním podřetěscem. Vrátí záznamy, ve kterých pole neobsahuje zadaný podřetěr.

V tomto příkladu dostáváme knihy, jejichž název neobsahuje "Průvodce".

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

Koncepční SQL

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

startsWith

Shoda předpony Vrátí záznamy, ve kterých pole začíná zadaným řetězcem.

V tomto příkladu dostáváme knihy, jejichž název začíná na "The".

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

Koncepční SQL

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

endsWith

Shoda přípony Vrátí záznamy, kde pole končí zadaným řetězcem.

V tomto příkladu dostáváme knihy, jejichž název končí "Chronicles".

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

Koncepční SQL

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

in

Shoda členství. Vrátí záznamy, ve kterých v zadaném seznamu existuje hodnota pole.

V tomto příkladu dostáváme knihy, jejichž žánr je "SciFi" nebo "Fantasy".

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

Koncepční SQL

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

isNull

Kontrola hodnoty Null. Vrátí záznamy, ve kterých je hodnota pole null nebo ne null v závislosti na logickém literálu.

V tomto příkladu dostáváme knihy, ve kterých má hodnocení hodnotu null.

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

Koncepční SQL

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

Příklad konfigurace

{
  "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" ]
        }
      }
    }
  }
}

Viz také

Koncepce REST GraphQL Účel
Projection $select items Výběr polí, která se mají vrátit
Filtering $filter filtr Omezení řádků podle podmínky
Řazení $orderby orderBy Definování pořadí řazení
Velikost stránky $first first Omezení počtu položek na stránku
Pokračování $after po Pokračovat z poslední stránky pomocí kurzoru

Poznámka:

Klíčová slova REST začínají následujícími konvencemi $OData.