Filtrera data i GraphQL (filter)

Filtrering begränsar stora datamängder till endast de poster du behöver. I GraphQL stöder Data API Builder (DAB) ett strukturerat filter argument för entitetsfrågor. Varje filter kompileras till parametriserad SQL för säkerhet och konsekvens.

Anmärkning

GraphQL-filtrering stöder jämförelse,logiska operatorer, strängmönster, medlemskap och nulloperatorer. GraphQL-filter använder strukturerade indataobjekt: { fieldName: { operator: value } }. Datum måste vara giltiga ISO 8601 UTC-strängar. Null-kontroller används isNull i stället för eq null.

Snabbblick

Operator Meaning
eq lika
neq inte lika med
gt mer än
gte större än eller lika med
lt mindre än
lte mindre än eller lika med
and logisk AND
or logisk OR
contains matchning av delsträngar
notContains inte delsträngsmatchning
startsWith prefixmatchning
endsWith suffixmatchning
in medlemskap
isNull null-kontroll

eq

Lika med. Returnerar poster där ett fälts värde exakt matchar den angivna literalen eller är null om du använder isNull.

Anmärkning

När du filtrerar efter datum- eller datetime-fält använder du osciterat ISO 8601 UTC-format (yyyy-MM-ddTHH:mm:ssZ). Format i quot- eller OData-format är ogiltiga.

  • Fel: $filter=Date ge '2025-01-01'
  • Fel: $filter=Date ge datetime'2025-01-01'
  • Rätt: $filter=Date ge 2025-01-01T00:00:00Z

I det här exemplet får vi böcker där rubriken är 'Dune', den tillgängliga flaggan är sann, priset är 20, det publicerade datumet är 1 januari 2024 och omdömet är 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 }
  }
}

Konceptuell 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

Inte lika med. Returnerar poster där ett fälts värde inte matchar literalen eller inte är null när det kombineras med isNull: false.

I det här exemplet får vi böcker där rubriken inte 'Foundation'är , den tillgängliga flaggan är inte falsk, priset är inte noll, det publicerade datumet är inte 31 december 2023 och omdömet är inte 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 }
  }
}

Konceptuell 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

Större än. Returnerar poster där ett fälts värde är strikt högre än den angivna literalen.

I det här exemplet får vi böcker vars titel sorteras alfabetiskt efter 'A', den tillgängliga flaggan är sann, priset är större än 10 och det publicerade datumet är efter den 1 januari 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 }
  }
}

Konceptuell 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

Större än eller lika med. Returnerar poster där ett fälts värde är högre än eller lika med den angivna literalen.

I det här exemplet får vi böcker vars titel är 'A' eller senare, den tillgängliga flaggan är sann, priset är minst 10 och det publicerade datumet är den 1 januari 2020 eller senare.

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

Konceptuell 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

Mindre än. Returnerar poster där ett fälts värde är strikt lägre än den angivna literalen.

I det här exemplet får vi böcker vars titel sorterar före 'Z', den tillgängliga flaggan är false, priset är mindre än 50 och det publicerade datumet är före den 1 januari 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 }
  }
}

Konceptuell 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

Mindre än eller lika med. Returnerar poster där ett fälts värde är lägre än eller lika med den angivna literalen.

I det här exemplet får vi böcker vars titel sorterar före eller lika med 'Z', den tillgängliga flaggan är sann, priset är 100 eller mindre och det publicerade datumet är den 1 januari 2030 eller före den 1 januari 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 }
  }
}

Konceptuell 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

Logiskt OCH. Kombinerar flera predikat som alla måste vara sanna för att en post ska matcha.

I det här exemplet får vi böcker som är tillgängliga, kostar mindre än 30 och publicerades efter den 1 januari 2022.

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

Konceptuell SQL

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

or

Logiskt ELLER. Returnerar poster där minst ett predikat i matrisen utvärderas till sant.

I det här exemplet får vi böcker som antingen är slut i lager eller prissatta över 50.

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

Konceptuell SQL

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

contains

Matchning av delsträngar. Returnerar poster där fältet innehåller den angivna delsträngen (skiftlägeskänsligheten beror på databassortering).

I det här exemplet får vi böcker vars titel innehåller ordet "Dune".

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

Konceptuell SQL

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

notContains

Negativ delsträngsmatchning. Returnerar poster där fältet inte innehåller den angivna delsträngen.

I det här exemplet får vi böcker vars titel inte innehåller "Guide".

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

Konceptuell SQL

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

startsWith

Prefixmatchning. Returnerar poster där fältet börjar med den angivna strängen.

I det här exemplet får vi böcker vars titel börjar med "The".

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

Konceptuell SQL

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

endsWith

Suffixmatchning. Returnerar poster där fältet slutar med den angivna strängen.

I det här exemplet får vi böcker vars titel slutar med "Chronicles".

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

Konceptuell SQL

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

in

Medlemskapsmatchning. Returnerar poster där fältets värde finns i den angivna listan.

I det här exemplet får vi böcker vars genre antingen är "SciFi" eller "Fantasy".

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

Konceptuell SQL

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

isNull

Null-kontroll. Returnerar poster där ett fälts värde antingen är null eller inte null beroende på den booleska literalen.

I det här exemplet får vi böcker där omdömet är null.

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

Konceptuell SQL

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

Exempelkonfiguration

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

Se även

Begrepp REST GraphQL Avsikt
Projection $select items Välj vilka fält som ska returneras
Filtering $filter filtrera Begränsa rader efter villkor
Sortering $orderby orderBy Definiera sorteringsordningen
Sidstorlek $first first Begränsa antalet objekt per sida
Fortsättning $after efter Fortsätt från den sista sidan med hjälp av en markör

Anmärkning

REST-nyckelord börjar med $, enligt OData-konventioner.