Firebase Data Connect, Google Cloud SQL ile yönetilen PostgreSQL örnekleriniz için bağlayıcılar oluşturmanıza olanak tanır. Bu bağlayıcılar, şemanızdaki verilerinizi kullanmak için sorgular ve mutasyonların birleşimidir.
Başlangıç kılavuzunda PostgreSQL için bir film inceleme uygulaması şeması tanıtıldı.
Bu kılavuzda, sorgular da dahil olmak üzere hem dağıtılabilir hem de geçici yönetim işlemleri tanıtılmıştı.
- Dağıtılabilir sorgular, tanımladığınız API uç noktalarıyla istemci uygulamalarından çağrı yapmak için uyguladığınız sorgulardır. Bunları sunucuya dağıtılan bir bağlayıcıda birleştirirsiniz. Data Connect aracı, API'nize göre istemci SDK'ları oluşturur. Dağıtılan sorgular IAM politikasıyla korunmaz. Bu nedenle, Data Connect
@authyönergesini kullanarak bunları güvenli hale getirdiğinizden emin olun. - Geçici yönetim sorguları, verileri okumak için ayrıcalıklı ortamlardan çalıştırılır. Bu görevleri Firebase konsolunda veya Data Connect VS Code uzantımızı kullanarak yerel geliştirme ortamlarında oluşturup yürütebilirsiniz.
Bu kılavuzda dağıtılabilir sorgular daha ayrıntılı olarak ele alınmaktadır.
Data Connect sorgularının özellikleri
Data Connect, PostgreSQL veritabanı göz önüne alındığında bekleyeceğiniz tüm yöntemlerle temel sorgular yapmanıza olanak tanır.
Ancak Data Connect'ın GraphQL'e yönelik uzantılarıyla daha hızlı ve verimli uygulamalar için gelişmiş sorgular uygulayabilirsiniz:
- Kayıtlar üzerinde tekrarlanan işlemleri basitleştirmek için birçok işlem tarafından döndürülen anahtar ölçeklendirme faktörlerini kullanın.
- Verileri aramak için çok adımlı mutasyon işlemleri sırasında sorgular gerçekleştirerek kod satırlarını ve sunucuya gidiş dönüşleri kaydedin.
Sorgu oluşturmak için oluşturulan alanları kullanma
Data Connect İşlemleriniz, şemanızdaki türlere ve tür ilişkilerine göre otomatik olarak oluşturulan Data Connect bir dizi alanı genişletir. Bu alanlar, şemanızı her düzenlediğinizde yerel araçlar tarafından oluşturulur.
Oluşturulan alanları kullanarak tek tablolardan tek kayıt veya birden çok kayıt almaktan ilgili tablolardan birden çok kayıt almaya kadar giderek karmaşıklaşan sorgular uygulayabilirsiniz.Şemanızın bir Movie türü ve ilişkili bir Actor türü içerdiğini varsayalım.
Data Connect, movie, movies, actors_on_movies alanlarını ve daha fazlasını oluşturur.
movie alanı içeren sorgu
|
|
Tek bir filmi anahtarına göre sorgulamak için bu alanı kullanın. query GetMovie($myKey: Movie_Key!) { movie(key: $myKey) { title } } |
movies alanı içeren sorgu
|
|
Bu alanı, birden fazla filmi (ör. belirli bir yıla ait tüm filmler) sorgulamak için kullanın. query GetMovies($myYear: Int!) { movies(where: { year: { eq: $myYear } }) { title } } |
actors_on_movies alanı içeren sorgu
|
|
Belirli bir filmle ilişkili tüm aktörleri sorgulamak için bu alanı kullanın. query GetActorsOnMovie($myKey: Movie_Key!) { actors_on_movies(where: { movie: { key: { eq: $myKey } } }) { actor { name } } } |
Sorgunun temel öğeleri
Data Connect sorguları, Data Connect uzantıları içeren GraphQL sorgularıdır. Normal bir GraphQL sorgusunda olduğu gibi, bir işlem adı ve GraphQL değişkenleri listesi tanımlayabilirsiniz.
Data Connect, GraphQL sorgularını @auth gibi özelleştirilmiş yönergelerle genişletir.
Bu nedenle, aşağıdaki sorguda:
querytürü tanımıListMoviesByGenreişlemi (sorgu) adı- Tek bir sorgu bağımsız değişkeni (burada
Stringtüründe bir$genredeğişkeni) - Tek bir yönerge,
@auth. - Tek bir alan,
movies.
query ListMoviesByGenre($genre: String!) @auth(level: PUBLIC) {
movies(where: { genre: { eq: $genre } }) {
id
title
}
}
Her sorgu bağımsız değişkeni için bir tür bildirimi, yerleşik bir tür (ör. String) veya özel, şemada tanımlanmış bir tür (ör. Movie) gerekir.
Bu kılavuzda, giderek daha karmaşık hale gelen sorguların imzası incelenecektir. Son olarak, dağıtılabilir sorgularınızı oluşturmak için kullanabileceğiniz güçlü ve kısa ilişki ifadelerini tanıtacağız.
Sorgulardaki temel skalerler
Ancak öncelikle önemli ölçeklendirme faktörleri hakkında bir not.
Data Connect, {TableType}_Key ile tanımlanan her tablonun birincil anahtarlarını temsil etmek için özel bir anahtar skaler tanımlar. Birincil anahtar değerlerinin JSON nesnesidir.
Önemli skalerleri, çoğu otomatik oluşturulmuş okuma alanının döndürdüğü yanıt olarak veya elbette skaler anahtarı oluşturmak için gereken tüm alanları aldığınız sorgulardan alırsınız.
Çalışan örneğimizdeki movie gibi tekil otomatik sorgular, bir anahtar skalerini kabul eden bir anahtar bağımsız değişkenini destekler.
Bir anahtar skalerini değişmez değer olarak iletiyor olabilirsiniz. Ancak, geçiş anahtarı skalerlerini giriş olarak iletmek için değişkenler tanımlayabilirsiniz.
Sorgu
query GetMovie($myKey: Movie_Key!) { movie(key: $myKey) { title } }
Yanıt
{ "data": { "movie": { "title": "Example Movie Title" } } }
Bunlar, istek JSON'ında aşağıdaki gibi (veya diğer serileştirme biçimlerinde) sağlanabilir:
{
# …
"variables": {
"myKey": {"id": "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"}
}
}
Özel skaler ayrıştırma sayesinde, değişkenler içerebilen nesne söz dizimi kullanılarak da Movie_Key oluşturulabilir. Bu özellik, genellikle tek tek bileşenleri bir nedenden dolayı farklı değişkenlere ayırmak istediğinizde yararlıdır.
Temel sorgular yazma
Veritabanınızdan tek tek kayıtlar almak için sorgu yazmaya başlayabilir veya sonuçları sınırlama ve sıralama seçeneğiyle birlikte bir tablodaki kayıtları listeleyebilirsiniz.
Tek tek kayıtları alma
En basit sorgu, kimliğe göre tek bir kayıt alır. Sorgunuzda otomatik olarak oluşturulan movie alanı kullanılır.
Sorgu
query GetMovieById($id: UUID!) @auth(level: PUBLIC) { movie(id: $id) { id title imageUrl genre } }
Yanıt
{ "data": { "movie": { "id": "some-uuid", "title": "Example Movie Title", "imageUrl": "https://example.com/movie.jpg", "genre": "Action" } } }
Tablodaki tüm kayıtları alma
Movies tablosundaki filmlerin tam listesi için bir alan alt kümesini almak üzere sorgunuzda otomatik olarak oluşturulan movies alanı kullanılır ve uygulamanız aşağıdaki gibi görünebilir.
Sorgu
query ListMovies @auth(level: PUBLIC) { movies { id title imageUrl genre } }
Yanıt
{ "data": { "movies": [ { "id": "some-uuid", "title": "Example Movie Title", "imageUrl": "https://example.com/movie.jpg", "genre": "Action" }, { "id": "another-uuid", "title": "Another Movie Title", "imageUrl": "https://example.com/another-movie.jpg", "genre": "Comedy" } ] } }
orderBy, limit ve offset operatörlerini kullanma
Doğal olarak, bir tablodaki tüm kayıtları listelemek sınırlı bir kullanışlılığa sahiptir.
Sonuçları sıralayabilir ve sayfalandırabilirsiniz. Bu bağımsız değişkenler kabul edilir ancak sonuçlarda döndürülmez.
Burada sorgu, puana göre en iyi 10 filmin başlıklarını alıyor.
Sorgu
query MoviesTop10 { movies(orderBy: [{ rating: DESC }], limit: 10) { # graphql: list the fields from the results to return title } }
Yanıt
{ "data": { "movies": [ { "title": "Top Movie 1" }, { "title": "Top Movie 2" }, { "title": "Top Movie 3" } // ... other 7 movies ] } }
Derecelendirmeye göre sıralanmış 11-20. filmler gibi, satırları bir uzaklıktan getirme konusunda bir kullanım alanınız olabilir.
Sorgu
query Movies11to20 { movies(orderBy: [{ rating: DESC }], limit: 10, offset: 10) { # graphql: list the fields from the results to return title } }
Yanıt
{ "data": { "movies": [ { "title": "Movie 11" }, { "title": "Movie 12" }, { "title": "Movie 13" } // ... other 7 movies ] } }
Sorgularda takma ad kullanma
Data Connect, sorgularda GraphQL takma adını destekler. Takma adlarla, bir sorgunun sonuçlarında döndürülen verileri yeniden adlandırabilirsiniz. Tek bir Data Connect sorgusu, sunucuya tek bir verimli istekte birden fazla filtre veya başka sorgu işlemi uygulayabilir. Bu sayede, aynı anda birden fazla "alt sorgu" yayınlanmış olur. Döndürülen veri kümesinde ad çakışmalarını önlemek için alt sorguları ayırt etmek üzere takma adlar kullanırsınız.
İfadenin mostPopular ve leastPopular takma adlarını kullandığı bir sorgu aşağıda verilmiştir.
Sorgu
query ReviewPopularitySpread($genre: String) { mostPopular: review( first: { where: {genre: {eq: $genre}}, orderBy: {popularity: DESC} } ), leastPopular: review( last: { where: {genre: {eq: $genre}}, orderBy: {popularity: DESC} } ) }
Yanıt
{ "data": { "mostPopular": [ { "popularity": 9 } ], "leastPopular": [ { "popularity": 1 } ] } }
Sorgu filtrelerini kullanma
Data Connect sorguları, tüm yaygın SQL filtreleri ve sıralama işlemleriyle eşlenir.
where ile orderBy operatörleriyle filtreleme
Tablodaki (ve iç içe geçmiş ilişkilerdeki) tüm eşleşen satırları döndürür. Filtreyle eşleşen kayıt yoksa boş bir dizi döndürür.
Sorgu
query MovieByTopRating($genre: String) { mostPopular: movies( where: { genre: { eq: $genre } }, orderBy: { rating: DESC } ) { # graphql: list the fields from the results to return id title genre description } }
Yanıt
{ "data": { "mostPopular": [ { "id": "some-uuid", "title": "Example Movie Title", "genre": "Action", "description": "A great movie" } ] } }
Boş değerleri test ederek filtreleme
null değerlerini isNull operatörünü kullanarak test edebilirsiniz.
Sorgu
query ListMoviesWithoutDescription { movies(where: { description: { isNull: true }}) { id title } }
Yanıt
{ "data": { "movies": [ { "id": "some-uuid", "title": "Example Movie Title" }, { "id": "another-uuid", "title": "Another Movie Title" } ] } }
Daha fazla operatör için giriş nesnesi türleri referans kılavuzuna bakın.
Değer karşılaştırmalarıyla filtreleme
Sorgularınızdaki değerleri karşılaştırmak için lt (küçüktür) ve ge (büyüktür veya eşittir) gibi operatörleri kullanabilirsiniz.
Sorgu
query ListMoviesByRating($minRating: Int!, $maxRating: Int!) { movies(where: { rating: { ge: $minRating, lt: $maxRating }}) { id title } }
Yanıt
{ "data": { "movies": [ { "id": "some-uuid", "title": "Example Movie Title" }, { "id": "another-uuid", "title": "Another Movie Title" } ] } }
Dizi alanları için includes ve excludes operatörleriyle filtreleme
Bir dizi alanının belirtilen öğeyi içerip içermediğini test edebilirsiniz.
Aşağıdaki örnekte includes operatörü gösterilmektedir.
Data Connect, includesAll, excludes, excludesAll ve daha fazlasını
destekler. Tam sayılar, dizeler, tarihler ve diğer veri türleri için bu tür operatörlerin tümünü _ListFilter referans dokümanının başlıklarında inceleyin.
Sorgu
query ListMoviesByTag($tag: String!) { movies(where: { tags: { includes: $tag }}) { # graphql: list the fields from the results to return id title } }
Yanıt
{ "data": { "movies": [ { "id": "some-uuid", "title": "Example Movie Title" } ] } }
Dize işlemleri ve normal ifadelerle filtreleme
Sorgularınızda normal ifadeler de dahil olmak üzere, tipik dize arama ve karşılaştırma işlemleri kullanılabilir. Verimlilik için burada birkaç işlemi paketlediğinizi ve bunları takma adlarla netleştirdiğinizi unutmayın.
query MoviesTitleSearch($prefix: String, $suffix: String, $contained: String, $regex: String) {
prefixed: movies(where: {title: {startsWith: $prefix}}) {...}
suffixed: movies(where: {title: {endsWith: $suffix}}) {...}
contained: movies(where: {title: {contains: $contained}}) {...}
}
_or, _and, _not operatör mantığıyla filtreleme
Daha karmaşık mantık için _or işlevini kullanın. Data Connect ayrıca _and ve _not operatörlerini de destekler.
Sorgu
query ListMoviesByGenreAndGenre($minRating: Int!, $genre: String) { movies( where: { _or: [{ rating: { ge: $minRating } }, { genre: { eq: $genre } }] } ) { # graphql: list the fields from the results to return title } }
Yanıt
{ "data": { "movies": [ { "title": "Movie Title 1" }, { "title": "Movie Title 2" } ] } }
İlişkisel sorgular yazma
Data Connect sorguları, tablolar arasındaki ilişkilere göre verilere erişebilir. Şemanızda tanımlanan nesne (bire bir) veya dizi (bire çok) ilişkilerini kullanarak iç içe yerleştirilmiş sorgular oluşturabilirsiniz. Yani, bir tür için verileri iç içe yerleştirilmiş veya ilgili bir türdeki verilerle birlikte getirebilirsiniz.
Bu tür sorgular, oluşturulan okuma alanlarında sihirli Data Connect _on_ ve _via söz dizimini kullanır.
Örnek şemayı incelemeyi unutmayın.
Çoka bir
Şimdi _on_ söz dizimini açıklayan bir sorguya bakalım.
Sorgu
query MyReviews @auth(level: USER) { user(key: {id_expr: "auth.uid"}) { reviews: reviews_on_user { movie { name } rating } } }
Yanıt
{ "data": { "user": { "reviews": [ { "movie": { "name": "Movie Title" }, "rating": 5 } ] } } }
Bire bir
_on_ söz dizimini kullanarak bire bir sorgu yazabilirsiniz.
Sorgu
query GetMovieMetadata($id: UUID!) @auth(level: PUBLIC) { movie(id: $id) { movieMetadatas_on_movie { director } } }
Yanıt
{ "data": { "movie": { "movieMetadatas_on_movie": { "director": "Some Director" } } } }
Çoka çok
Çoktan çoka sorgularında _via_ söz dizimi kullanılır. Çoktan çoka sorgu, belirtilen bir filmdeki aktörleri alabilir.
Sorgu
query MoviesActors($id: UUID!) @auth(level: USER) { movie(id: $id) { actors: actors_via_MovieActors { name } } }
Yanıt
{ "data": { "movie": { "actors": [ { "name": "Actor Name" } ] } } }
Ancak role
içindeki oyuncuları ve ilişkili filmleri mainActors ve
supportingActors sonuçlarında almak için takma adlar kullanarak daha karmaşık bir sorgu yazabiliriz. Bu ilişki çoktan çoğa olduğundan _via_ söz dizimi kullanılır.
Sorgu
query GetMovieCast($movieId: UUID!, $actorId: UUID!) @auth(level: PUBLIC) { movie(id: $movieId) { mainActors: actors_via_MovieActor(where: { role: { eq: "main" } }) { name } supportingActors: actors_via_MovieActor( where: { role: { eq: "supporting" } } ) { name } } actor(id: $actorId) { mainRoles: movies_via_MovieActor(where: { role: { eq: "main" } }) { title } supportingRoles: movies_via_MovieActor( where: { role: { eq: "supporting" } } ) { title } } }
Yanıt
{ "data": { "movie": { "mainActors": [ { "name": "Main Actor Name" } ], "supportingActors": [ { "name": "Supporting Actor Name" } ] }, "actor": { "mainRoles": [ { "title": "Main Role Movie Title" } ], "supportingRoles": [ { "title": "Supporting Role Movie Title" } ] } } }
Toplama sorguları
Toplama nedir ve neden kullanılır?
Toplama alanları, sonuç listesinde hesaplamalar yapmanıza olanak tanır. Toplama alanlarıyla aşağıdakiler gibi işlemler yapabilirsiniz:
- Yorumun ortalama puanını bulma
- Alışveriş sepetindeki öğelerin toplam maliyetini bulma
- En yüksek veya en düşük puanlı ürünü bulma
- Mağazanızdaki ürünlerin sayısını belirleme
Toplama işlemleri sunucuda gerçekleştirilir. Bu durum, istemci tarafında hesaplamaya kıyasla çeşitli avantajlar sunar:
- Daha hızlı uygulama performansı (istemci tarafı hesaplamalarından kaçındığınız için)
- Veri çıkışı maliyetleri azalır (tüm girişler yerine yalnızca toplanmış sonuçları gönderdiğiniz için).
- Gelişmiş güvenlik (çünkü müşterilere tüm veri kümesi yerine toplu verilere erişim izni verebilirsiniz)
Toplamalar için örnek şema
Bu bölümde, toplamaların nasıl kullanılacağını açıklamak için iyi bir örnek olan bir mağaza vitrini örnek şemasına geçeceğiz:
type Product @table {
name: String!
manufacturer: String!
quantityInStock: Int!
price: Float!
expirationDate: Date
}
Basit toplamalar
Tüm alanlar için _count
En basit toplama alanı _count'dır: Sorgunuzla eşleşen satır sayısını döndürür. Türünüzdeki her alan için, alan türüne bağlı olarak Data Connect
karşılık gelen toplama alanları oluşturur.
Sorgu
query CountProducts {
products {
_count
}
}
Yanıt one
one
Örneğin, veritabanınızda 5 ürün varsa sonuç şu şekilde olur:
{
"products": [
{
"_count": 5
}
]
}
Tüm alanlarda, söz konusu alanda kaç satırın boş olmayan bir değere sahip olduğunu sayan bir <field>_count alanı bulunur.
Sorgu
query CountProductsWithExpirationDate {
products {
expirationDate_count
}
}
Yanıtfield_count
field_count
Örneğin, geçerlilik bitiş tarihi olan 3 ürününüz varsa sonuç şu şekilde olur:
{
"products": [
{
"expirationDate_count": 3
}
]
}
Sayısal alanlar için _min, _max, _sum ve _avg
Sayısal alanlar (int, float, int64) için de <field>_min, <field>_max,
<field>_sum ve <field>_avg geçerlidir.
Sorgu
query NumericAggregates {
products {
quantityInStock_max
price_min
price_avg
quantityInStock_sum
}
}
Yanıt_min _max _sum _avg
_min _max _sum _avg
Örneğin, aşağıdaki ürünlere sahipseniz:
- A ürünü:
quantityInStock: 10,price: 2.99 - B ürünü:
quantityInStock: 5,price: 5.99 - C ürünü:
quantityInStock: 20,price: 1.99
Sonuç şöyle olur:
{
"products": [
{
"quantityInStock_max": 20,
"price_min": 1.99,
"price_avg": 3.6566666666666666,
"quantityInStock_sum": 35
}
]
}
Tarihler ve zaman damgaları için _min ve _max
Tarih ve zaman damgası alanlarında <field>_min ve <field>_max bulunur.
Sorgu
query DateAndTimeAggregates {
products {
expirationDate_max
expirationDate_min
}
}
Yanıt_min _maxdatetime
_min _maxdatetime
Örneğin, aşağıdaki son kullanma tarihlerine sahipseniz:
- A ürünü:
2024-01-01 - B ürünü:
2024-03-01 - Ürün C:
2024-02-01
Sonuç şöyle olur:
{
"products": [
{
"expirationDate_max": "2024-03-01",
"expirationDate_min": "2024-01-01"
}
]
}
Farklı
distinct bağımsız değişkeni, bir alanın (veya alan kombinasyonunun) tüm benzersiz değerlerini almanızı sağlar. Örneğin:
Sorgu
query ListDistinctManufacturers {
products(distinct: true) {
manufacturer
}
}
Yanıtdistinct
distinct
Örneğin, aşağıdaki üreticileriniz varsa:
- A ürünü:
manufacturer: "Acme" - B ürünü:
manufacturer: "Beta" - Ürün C:
manufacturer: "Acme"
Sonuç şöyle olur:
{
"products": [
{ "manufacturer": "Acme" },
{ "manufacturer": "Beta" }
]
}
Ayrıca, farklı değerleri toplamak için toplama alanlarında distinct bağımsız değişkenini de kullanabilirsiniz. Örneğin:
Sorgu
query CountDistinctManufacturers {
products {
manufacturer_count(distinct: true)
}
}
Yanıtdistinctonaggregate
distinctonaggregate
Örneğin, aşağıdaki üreticileriniz varsa:
- A ürünü:
manufacturer: "Acme" - B ürünü:
manufacturer: "Beta" - Ürün C:
manufacturer: "Acme"
Sonuç şöyle olur:
{
"products": [
{
"manufacturer_count": 2
}
]
}
Gruplandırılmış toplamalar
Bir türde toplama ve toplama dışı alanların bir karışımını seçerek gruplandırılmış toplama işlemi gerçekleştirirsiniz. Bu işlev, toplama içermeyen alanlar için aynı değere sahip olan tüm eşleşen satırları birlikte gruplandırır ve bu grup için toplama içeren alanları hesaplar. Örneğin:
Sorgu
query MostExpensiveProductByManufacturer {
products {
manufacturer
price_max
}
}
Yanıtgroupedaggregates
groupedaggregates
Örneğin, aşağıdaki ürünlere sahipseniz:
- A ürünü:
manufacturer: "Acme",price: 2.99 - B ürünü:
manufacturer: "Beta",price: 5.99 - C ürünü:
manufacturer: "Acme",price: 1.99
Sonuç şöyle olur:
{
"products": [
{ "manufacturer": "Acme", "price_max": 2.99 },
{ "manufacturer": "Beta", "price_max": 5.99 }
]
}
Gruplandırılmış toplamlar içeren having ve where
Ayrıca, yalnızca belirtilen ölçütleri karşılayan grupları döndürmek için having ve where bağımsız değişkenini de kullanabilirsiniz.
having, grupları toplu alanlarına göre filtrelemenize olanak tanır.where, satırları toplama dışı alanlara göre filtrelemenizi sağlar.
Sorgu
query FilteredMostExpensiveProductByManufacturer {
products(having: {price_max: {ge: 2.99}}) {
manufacturer
price_max
}
}
Yanıthavingwhere
havingwhere
Örneğin, aşağıdaki ürünlere sahipseniz:
- A ürünü:
manufacturer: "Acme",price: 2.99 - B ürünü:
manufacturer: "Beta",price: 5.99 - C ürünü:
manufacturer: "Acme",price: 1.99
Sonuç şöyle olur:
{
"products": [
{ "manufacturer": "Acme", "price_max": 2.99 },
{ "manufacturer": "Beta", "price_max": 5.99 }
]
}
Tablolar arasında toplama
Toplama alanları, verilerinizle ilgili karmaşık soruları yanıtlamak için oluşturulan bire çok ilişki alanlarıyla birlikte kullanılabilir. Aşağıda, örneklerde kullanabileceğimiz ayrı bir tablo olan Manufacturer ile değiştirilmiş bir şema yer almaktadır:
type Product @table {
name: String!
manufacturer: Manufacturer!
quantityInStock: Int!
price: Float!
expirationDate: Date
}
type Manufacturer @table {
name: String!
headquartersCountry: String!
}
Artık toplama alanlarını kullanarak bir üreticinin kaç ürün ürettiğini bulma gibi işlemler yapabiliriz:
Sorgu
query GetProductCount($id: UUID) {
manufacturers {
name
products_on_manufacturer {
_count
}
}
}
Yanıt aggregatesacrosstables
aggregatesacrosstables
Örneğin, aşağıdaki üreticileriniz varsa:
- Üretici A:
name: "Acme",products_on_manufacturer: 2 - B üreticisi:
name: "Beta",products_on_manufacturer: 1
Sonuç şöyle olur:
{
"manufacturers": [
{ "name": "Acme", "products_on_manufacturer": { "_count": 2 } },
{ "name": "Beta", "products_on_manufacturer": { "_count": 1 } }
]
}
Sorgu numaralandırma alanları
Şemanızdaki numaralandırma alanlarını sorgulayabilirsiniz.
Numaralandırmamızın şu şekilde uygulandığını varsayalım:
enum AspectRatio {
ACADEMY
WIDESCREEN
ANAMORPHIC
IMAX
"No information available on aspect ratio"
UNAVAILABLE
}
Örneğin, tercih ettiğiniz en boy oranında biçimlendirilmiş tüm filmleri listeleyebilirsiniz.
query ListMoviesByAspectRatio($aspectRatio: AspectRatio!) @auth(level: PUBLIC) {
movies(where:
{originalAspectRatio: {eq: $aspectRatio}}
) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
otherAspectRatios
}
}
Numaralandırma alanlarını filtreleme
Numaralandırılmış türler için standart filtreleme işlemleri (eq, ne, ge, gt, lt, le, in nin) ve listeler için includes, excludes, includesAll ve excludesAll işlemleri kullanılabilir.
order içinde, büyüktür ve küçüktür operatörleri anlamlı yürütme için enum değerlerinin sırasını kullanır. Numaralandırmanın başındaki değerler, numaralandırma tanımının sonundaki değerlerden küçüktür.
Örneğin, aşağıdaki where ifadesi, giriş en boy oranından ratio daha düşük olan tüm filmleri döndürür.
- İlk örnekte,
$aspectRatioIMAX olsaydı ACADEMY, WIDESCREEN ve ANAMORPHIC ile eşleşenratiofilmleri seçilirdi. - İkinci örnekte, yalnızca ACADEMY ve WIDESCREEN'de bulunan filmler döndürülür.
movies(where: {originalAspectRatio: {lt: $aspectRatio}})
movies(where: {otherAspectRatios: {includesAll: [ACADEMY, WIDESCREEN]}})
Numaralandırma alanlarında toplama sorguları gerçekleştirme
Numaralandırmalar için yalnızca _count desteklenir.
Aşağıdaki sorgu, her en boy oranındaki toplam film sayısını gösterir.
query MovieCountByOriginalAspectRatio @auth(level: PUBLIC) {
movies {
_count
originalAspectRatio
}
}
İstemci kodundan numaralandırma sorgularını çağırma
SDK kılavuzlarında (iOS, Android, web ve Flutter) istemcilerden gelen numaralandırma sorgularını kullanma ve numaralandırmaları yönetme esnekliğinizi en üst düzeye çıkaracak istemci çağrıları tasarlama hakkında bilgi edinin.
Gelişmiş sorgular yazma: Çok adımlı işlemlerde verileri okumak için query alanlarını kullanın.
Mevcut verileri aramak ve doğrulamak için mutasyon yürütülürken veritabanınızı okumak isteyebileceğiniz birçok durum vardır. Örneğin, ekleme veya güncelleme işlemleri yapmadan önce bu işlemi gerçekleştirebilirsiniz. Bu seçenekler gidiş dönüş işlemlerini ve dolayısıyla maliyetleri azaltır.
Data Connect bu işlevi destekler. Çok adımlı işlemleri inceleyin.
Sonraki adımlar
İlginizi çekebilir:
- Yapay zeka destekli araçları kullanarak uygulamalarınız için sorgu oluşturma
- Sorgularınızı yetkilendirme kılavuzuna göre yetkilendirme
- Web, iOS, Android ve Flutter için istemci kodunuzdan sorgu çağırma.