Condividi tramite


Filtro dei dati in GraphQL (filter)

Il filtro restringe i set di dati di grandi dimensioni solo ai record necessari. In GraphQL Il generatore di API dati supporta un argomento strutturato filter nelle query di entità. Ogni filtro viene compilato in SQL con parametri per garantire sicurezza e coerenza.

Annotazioni

Il filtro GraphQL supporta operatori di confronto, logica, modello di stringa, appartenenza e null. I filtri GraphQL usano oggetti di input strutturati: { fieldName: { operator: value } }. Le date devono essere stringhe UTC ISO 8601 valide. I controlli Null usano isNull anziché eq null.

Sguardo rapido

Operator Meaning
eq uguale
neq diverso da
gt maggiore di
gte maggiore o uguale a
lt minore di
lte minore o uguale a
and AND logico
or OR logico
contains corrispondenza di sottostringa
notContains non corrispondenza di sottostringa
startsWith corrispondenza prefisso
endsWith corrispondenza suffisso
in Iscrizione
isNull controllo null

eq

Uguale a. Restituisce i record in cui il valore di un campo corrisponde esattamente al valore letterale specificato o è Null se si usa isNull.

Annotazioni

Quando si filtrano in base ai campi date o datetime, usare il formato UTC ISO 8601 senza virgO (yyyy-MM-ddTHH:mm:ssZ). I formati tra virgolette o di tipo OData non sono validi.

  • Errato: $filter=Date ge '2025-01-01'
  • Errato: $filter=Date ge datetime'2025-01-01'
  • Risposta esatta: $filter=Date ge 2025-01-01T00:00:00Z

In questo esempio si ottengono libri in cui il titolo è 'Dune', il flag disponibile è true, il prezzo è 20, la data di pubblicazione è il 1° gennaio 2024 e la classificazione è 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 }
  }
}

SQL concettuale

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

Non uguale a. Restituisce i record in cui il valore di un campo non corrisponde al valore letterale o non è Null se combinato con isNull: false.

In questo esempio si ottengono libri in cui il titolo non 'Foundation'è , il flag disponibile non è false, il prezzo non è zero, la data di pubblicazione non è il 31 dicembre 2023 e la classificazione non è 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 }
  }
}

SQL concettuale

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

Maggiore. Restituisce i record in cui il valore di un campo è rigorosamente superiore al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo viene ordinato alfabeticamente dopo 'A', il flag disponibile è true, il prezzo è maggiore di 10 e la data di pubblicazione è successiva al 1° gennaio 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 }
  }
}

SQL concettuale

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

Maggiore o uguale a. Restituisce i record in cui il valore di un campo è maggiore o uguale al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo è 'A' o versione successiva, il flag disponibile è true, il prezzo è almeno 10 e la data di pubblicazione è il 1° gennaio 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 }
  }
}

SQL concettuale

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

Meno di. Restituisce i record in cui il valore di un campo è rigorosamente inferiore al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo viene ordinato prima 'Z'di , il flag disponibile è false, il prezzo è minore di 50 e la data di pubblicazione è precedente al 1° gennaio 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 }
  }
}

SQL concettuale

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

Minore o uguale a. Restituisce i record in cui il valore di un campo è inferiore o uguale al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo viene ordinato prima o uguale a 'Z', il flag disponibile è true, il prezzo è 100 o minore e la data di pubblicazione è il 1° gennaio 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 }
  }
}

SQL concettuale

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

AND logico. Combina più predicati che devono essere tutti true affinché un record corrisponda.

In questo esempio si ottengono libri disponibili, costano meno di 30 e sono stati pubblicati dopo il 1° gennaio 2022.

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

SQL concettuale

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

or

OR logico. Restituisce i record in cui almeno un predicato nella matrice restituisce true.

In questo esempio si ottengono libri che sono esauriti o hanno un prezzo superiore a 50.

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

SQL concettuale

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

contains

Corrispondenza di sottostringa. Restituisce i record in cui il campo contiene la sottostringa fornita( la distinzione tra maiuscole e minuscole dipende dalle regole di confronto del database).

In questo esempio si ottengono libri il cui titolo include la parola "Dune".

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

SQL concettuale

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

notContains

Corrispondenza di sottostringa negativa. Restituisce i record in cui il campo non contiene la sottostringa specificata.

In questo esempio si ottengono libri il cui titolo non include "Guide".

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

SQL concettuale

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

startsWith

Corrispondenza del prefisso. Restituisce i record in cui il campo inizia con la stringa specificata.

In questo esempio si ottengono libri il cui titolo inizia con "The".

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

SQL concettuale

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

endsWith

Corrispondenza del suffisso. Restituisce i record in cui il campo termina con la stringa specificata.

In questo esempio si ottengono libri il cui titolo termina con "Cronache".

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

SQL concettuale

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

in

Corrispondenza di appartenenza. Restituisce i record in cui il valore del campo esiste nell'elenco fornito.

In questo esempio si ottengono libri il cui genere è "SciFi" o "Fantasy".

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

SQL concettuale

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

isNull

Controllo Null. Restituisce i record in cui il valore di un campo è null o non null a seconda del valore letterale booleano.

In questo esempio si ottengono libri in cui la classificazione è null.

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

SQL concettuale

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

Configurazione di esempio

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

Vedere anche

Concetto REST GraphQL Scopo
Projection $select Elementi Scegliere i campi da restituire
Filtraggio $filter filtro Limitare le righe per condizione
Ordinamento $orderby orderBy Definire l'ordinamento
Dimensioni pagina $first primo Limitare il numero di elementi per pagina
Continuazione $after dopo Continuare dall'ultima pagina usando un cursore

Annotazioni

Le parole chiave REST iniziano con $, seguendo le convenzioni OData.