Aracılığıyla paylaş


GraphQL'de verileri filtreleme (filter)

Filtreleme, büyük veri kümelerini yalnızca ihtiyacınız olan kayıtlarla daraltıyor. GraphQL'de Veri API'si oluşturucusu (DAB), varlık sorgularında yapılandırılmış filter bir bağımsız değişkeni destekler. Her filtre, güvenlik ve tutarlılık için parametreli SQL'e derler.

Uyarı

GraphQL filtreleme karşılaştırmayı, mantıksal, dize deseni, üyeliği ve null işleçleri destekler. GraphQL filtreleri yapılandırılmış giriş nesnelerini kullanır: { fieldName: { operator: value } }. Tarihler geçerli ISO 8601 UTC dizeleri olmalıdır. Null denetimler yerine eq nullkullanırisNull.

Hızlı bakış

Operator Meaning
eq eşit
neq eşit değil
gt büyüktür
gte büyüktür veya eşittir
lt daha az
lte küçüktür veya eşittir
and mantıksal AND
or mantıksal OR
contains alt dize eşleşmesi
notContains alt dize eşleşmedi
startsWith ön ek eşleşmesi
endsWith sonek eşleşmesi
in Üyelik
isNull null denetim

eq

Eşittir. Bir alanın değerinin sağlanan değişmez değerle tam olarak eşleştiği veya kullanılıyorsa isNullnull olduğu kayıtları döndürür.

Uyarı

Tarih veya tarih saat alanlarını filtrelerken, alıntılanmamış ISO 8601 UTC biçimini (yyyy-MM-ddTHH:mm:ssZ) kullanın. Alıntılanan veya OData stili biçimler geçersiz.

  • Yanlış: $filter=Date ge '2025-01-01'
  • Yanlış: $filter=Date ge datetime'2025-01-01'
  • Doğru: $filter=Date ge 2025-01-01T00:00:00Z

Bu örnekte, başlığın 'Dune'olduğu, kullanılabilir bayrağın true, fiyatın 20, yayımlanma tarihinin 1 Ocak 2024 ve derecelendirmenin null olduğu kitapları alıyoruz.

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

Kavramsal 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

Eşit değil. Bir alanın değerinin değişmez değerle eşleşmediği veya ile isNull: falsebirleştirildiğinde null olmadığı kayıtları döndürür.

Bu örnekte, başlığın olmadığı 'Foundation', kullanılabilir bayrağın yanlış olmadığı, fiyatın sıfır olmadığı, yayımlanma tarihinin 31 Aralık 2023 olmadığı ve derecelendirmenin null olmadığı kitaplar alıyoruz.

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

Kavramsal 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

Büyüktür. Bir alanın değerinin sağlanan değişmez değerden kesinlikle yüksek olduğu kayıtları döndürür.

Bu örnekte, başlığı 'den sonra 'A'alfabetik olarak sıralanan, kullanılabilir bayrağı true, fiyatı 10'dan büyük ve yayımlanma tarihi 1 Ocak 2020'den sonra olan kitapları alıyoruz.

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

Kavramsal 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

Büyüktür veya eşittir. Bir alanın değerinin verilen değişmez değerden yüksek veya buna eşit olduğu kayıtları döndürür.

Bu örnekte, başlığı 'A' veya üzeri olan, kullanılabilir bayrağı doğru, fiyatı en az 10 olan ve yayımlanma tarihi 1 Ocak 2020 veya sonrasında olan kitaplar alacağız.

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

Kavramsal 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

Küçüktür. Bir alanın değerinin verilen değişmez değerden kesinlikle daha düşük olduğu kayıtları döndürür.

Bu örnekte, başlığı 'den önce 'Z'sıralanan, kullanılabilir bayrağı false, fiyatı 50'den küçük ve yayımlanma tarihi 1 Ocak 2030'dan önce olan kitapları alıyoruz.

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

Kavramsal 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

Küçük veya eşittir. Bir alanın değerinin verilen değişmez değerden düşük veya buna eşit olduğu kayıtları döndürür.

Bu örnekte, başlığı değerinden önce veya değerine eşit 'Z'olarak sıralanan, kullanılabilir bayrağı true, fiyatı 100 veya daha düşük olan ve yayımlanma tarihi 1 Ocak 2030 veya öncesinde olan kitapları alıyoruz.

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

Kavramsal 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

Mantıksal VE. Kaydın eşleşmesi için tümü doğru olması gereken birden çok koşulu birleştirir.

Bu örnekte, 30'dan az maliyetli ve 1 Ocak 2022'den sonra yayımlanmış olan kitaplar alıyoruz.

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

Kavramsal SQL

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

or

Mantıksal VEYA. Dizideki en az bir koşulun true olarak değerlendirildiği kayıtları döndürür.

Bu örnekte, stokta olmayan veya 50'nin üzerinde fiyatlanan kitaplar alıyoruz.

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

Kavramsal SQL

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

contains

Alt dize eşleşmesi. Alanın sağlanan alt dizeyi içerdiği kayıtları döndürür (büyük/küçük harf duyarlılığı, veritabanı harmanlama işlemine bağlıdır).

Bu örnekte, başlığı "Dune" sözcüğünü içeren kitaplar alıyoruz.

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

Kavramsal SQL

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

notContains

Negatif alt dize eşleşmesi. Alanın sağlanan alt dizeyi içermediği kayıtları döndürür.

Bu örnekte, başlığında "Kılavuz" olmayan kitaplar alıyoruz.

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

Kavramsal SQL

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

startsWith

Ön ek eşleşmesi. Alanın sağlanan dizeyle başladığı kayıtları döndürür.

Bu örnekte, başlığı "The" ile başlayan kitaplar alıyoruz.

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

Kavramsal SQL

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

endsWith

Sonek eşleşmesi. Alanın sağlanan dizeyle sona erdiği kayıtları döndürür.

Bu örnekte, başlığı "Chronicles" ile biten kitaplar alıyoruz.

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

Kavramsal SQL

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

in

Üyelik eşleşmesi. Sağlanan listede alanın değerinin bulunduğu kayıtları döndürür.

Bu örnekte, türü "SciFi" veya "Fantasy" olan kitaplar alıyoruz.

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

Kavramsal SQL

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

isNull

Null denetimi. Boole değişmez değerine bağlı olarak alanın değerinin null olduğu veya null olmadığı kayıtları döndürür.

Bu örnekte, derecelendirmenin null olduğu kitapları alıyoruz.

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

Kavramsal SQL

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

Örnek yapılandırma

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

Ayrıca bakınız

Konsept REST GraphQL Amaç
Projection $select items Döndürülecek alanları seçme
Filtering $filter filtre Satırları koşula göre kısıtlama
Sıralama $orderby orderBy Sıralama düzenini tanımlama
Sayfa Boyutu $first first Sayfa başına öğe sayısını sınırlama
Devam $after sonra İmleç kullanarak son sayfadan devam et

Uyarı

REST anahtar sözcükleri, OData kurallarını izleyerek ile $başlar.