Firebase Data Connect به شما امکان می دهد برای نمونه های PostgreSQL خود که با Google Cloud SQL مدیریت می شوند، رابط ایجاد کنید. این رابطها ترکیبی از پرس و جو و جهش برای استفاده از دادههای شما از طرح شما هستند.
راهنمای شروع یک طرح برنامه بررسی فیلم برای PostgreSQL معرفی شد.
آن راهنما همچنین عملیات اجرایی قابل استقرار و موقت، از جمله پرس و جوها را معرفی کرد.
- پرس و جوهای قابل استقرار آنهایی هستند که برای تماس از برنامه های سرویس گیرنده، با نقاط پایانی API که شما تعریف می کنید، پیاده سازی می کنید. آنها را در یک رابط مستقر در سرور قرار می دهید. ابزار Data Connect SDK های مشتری را بر اساس API شما ایجاد می کند. جستارهای مستقر شده توسط خط مشی IAM محافظت نمی شوند، بنابراین مطمئن شوید که آنها را با استفاده از دستورالعمل Data Connect
@auth
ایمن کنید. - پرس و جوهای اداری موقت از محیط های دارای امتیاز برای خواندن داده ها اجرا می شوند. می توانید آنها را در کنسول Firebase یا در محیط های توسعه محلی با استفاده از افزونه Data Connect VS Code ایجاد و اجرا کنید.
این راهنما نگاه عمیق تری به پرس و جوهای قابل استقرار دارد.
ویژگی های پرس و جوهای Data Connect
Data Connect به شما امکان می دهد پرس و جوهای اساسی را به تمام روش هایی که از پایگاه داده PostgreSQL انتظار دارید انجام دهید.
اما با افزونه های Data Connect برای GraphQL، می توانید پرس و جوهای پیشرفته را برای برنامه های سریعتر و کارآمدتر پیاده سازی کنید:
- از اسکالرهای کلیدی بازگردانده شده توسط بسیاری از عملیات برای ساده کردن عملیات تکراری روی رکوردها استفاده کنید
- در طول عملیات جهش چند مرحله ای برای جستجوی داده ها، صرفه جویی در خطوط کد و رفت و برگشت به سرور، پرس و جوها را انجام دهید.
از فیلدهای ایجاد شده برای ساخت پرس و جو استفاده کنید
عملیات Data Connect شما مجموعه ای از فیلدها را گسترش می دهد که به طور خودکار Data Connect تولید می شود بر اساس انواع و روابط نوع در طرح شما. هر زمان که شما طرحواره خود را ویرایش می کنید، این فیلدها توسط ابزارهای محلی ایجاد می شوند.
میتوانید از فیلدهای تولید شده برای پیادهسازی پرس و جوهای پیچیدهتر، از بازیابی رکوردهای فردی یا چندین رکورد از جداول منفرد گرفته تا چندین رکورد از جداول مرتبط، استفاده کنید. فرض کنید طرح شما حاوی یک نوع Movie
و یک نوع Actor
مرتبط است. Data Connect movie
، movies
، فیلدهای actors_on_movies
و موارد دیگر را تولید می کند.
پرس و جو با
زمینه movie
فیلد | از این فیلد برای پرس و جو از یک فیلم با کلید آن استفاده کنید. query GetMovie($myKey: Movie_Key!) { movie(key: $myKey) { title } } |
پرس و جو با
زمینه movies
فیلد | از این فیلد برای پرس و جو از چندین فیلم، به عنوان مثال، همه فیلمهای دارای یک سال معین استفاده کنید. query GetMovies($myYear: Int!) { movies(where: { year: { eq: $myYear } }) { title } } |
پرس و جو با
قسمت actors_on_movies
قسمت | از این فیلد برای پرس و جو از همه بازیگران مرتبط با یک فیلم خاص استفاده کنید. query GetActorsOnMovie($myKey: Movie_Key!) { actors_on_movies(where: { movie: { key: { eq: $myKey } } }) { actor { name } } } |
عناصر ضروری یک پرس و جو
کوئری های Data Connect کوئری های GraphQL با پسوندهای Data Connect هستند. درست مانند یک پرس و جو معمولی GraphQL، می توانید نام عملیات و لیستی از متغیرهای GraphQL را تعریف کنید.
Data Connect پرس و جوهای GraphQL را با دستورالعمل های سفارشی مانند @auth
گسترش می دهد.
بنابراین پرس و جو زیر دارد:
- تعریف نوع
query
- نام عملیات
ListMoviesByGenre
(پرس و جو). - یک آرگومان پرس و جو، در اینجا یک متغیر
$genre
از نوعString
- یک دستورالعمل واحد،
@auth
. - یک رشته،
movies
.
query ListMoviesByGenre($genre: String!) @auth(level: PUBLIC) {
movies(where: { genre: { eq: $genre } }) {
id
title
}
}
هر آرگومان پرس و جو نیاز به یک اعلان نوع، یک نوع داخلی مانند String
، یا یک نوع سفارشی، طرحواره تعریف شده مانند Movie
دارد.
این راهنما به امضای پرسشهای پیچیدهتر میپردازد. با معرفی عبارات روابط قدرتمند و مختصر که میتوانید برای ایجاد پرس و جوهای قابل استقرار خود از آنها استفاده کنید، پایان میدهید.
اسکالرهای کلیدی در پرس و جوها
اما ابتدا یک نکته در مورد اسکالرهای کلیدی.
Data Connect یک اسکالر کلید ویژه برای نمایش کلیدهای اولیه هر جدول تعریف می کند که با {TableType}_Key مشخص می شود. این یک شی JSON از مقادیر کلید اولیه است.
شما اسکالرهای کلیدی را به عنوان پاسخی که توسط اکثر فیلدهای خواندنی تولید شده به طور خودکار بازیابی می شود، یا البته از پرس و جوهایی که در آن همه فیلدهای مورد نیاز برای ساخت کلید اسکالر را بازیابی کرده اید، بازیابی می کنید.
پرسوجوهای خودکار منفرد، مانند movie
در مثال در حال اجرا، از یک آرگومان کلیدی پشتیبانی میکنند که یک اسکالر کلیدی را میپذیرد.
شما ممکن است یک اسکالر کلیدی را به صورت تحت اللفظی پاس کنید. اما، می توانید متغیرهایی را برای ارسال اسکالرهای کلیدی به عنوان ورودی تعریف کنید.
پرس و جو
query GetMovie($myKey: Movie_Key!) { movie(key: $myKey) { title } }
پاسخ
{ "data": { "movie": { "title": "Example Movie Title" } } }
اینها را می توان در درخواست JSON مانند این (یا سایر قالب های سریال سازی) ارائه کرد:
{
# …
"variables": {
"myKey": {"id": "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"}
}
}
به لطف تجزیه اسکالر سفارشی، یک Movie_Key
نیز می تواند با استفاده از نحو شی که ممکن است حاوی متغیرهایی باشد ساخته شود. این بیشتر زمانی مفید است که بخواهید به دلایلی اجزای جداگانه را به متغیرهای مختلف تقسیم کنید.
سوالات اولیه را بنویسید
می توانید برای دریافت رکوردهای فردی از پایگاه داده خود شروع به نوشتن پرس و جو کنید، یا رکوردها را از یک جدول با گزینه محدود کردن و سفارش نتایج فهرست کنید.
سوابق فردی را بازیابی کنید
ساده ترین پرس و جو یک رکورد واحد را با شناسه دریافت می کند. درخواست شما از فیلد movie
تولید شده به صورت خودکار استفاده خواهد کرد.
پرس و جو
query GetMovieById($id: UUID!) @auth(level: PUBLIC) { movie(id: $id) { id title imageUrl genre } }
پاسخ
{ "data": { "movie": { "id": "some-uuid", "title": "Example Movie Title", "imageUrl": "https://example.com/movie.jpg", "genre": "Action" } } }
همه رکوردها را در یک جدول بازیابی کنید
برای بازیابی زیرمجموعهای از فیلدها برای فهرست کامل فیلمها از جدول Movies
، درخواست شما از فیلد movies
تولید شده خودکار استفاده میکند و پیادهسازی شما ممکن است مانند زیر باشد.
پرس و جو
query ListMovies @auth(level: PUBLIC) { movies { id title imageUrl genre } }
پاسخ
{ "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
و offset
استفاده کنید
به طور طبیعی، فهرست کردن همه رکوردها از یک جدول، سودمندی محدودی دارد.
می توانید سفارش دهید و صفحه بندی نتایج را انجام دهید. این آرگومانها پذیرفته میشوند اما به نتایج بازگردانده نمیشوند.
در اینجا، پرس و جو عناوین 10 فیلم برتر را بر اساس رتبه بندی دریافت می کند.
پرس و جو
query MoviesTop10 { movies(orderBy: [{ rating: DESC }], limit: 10) { # graphql: list the fields from the results to return title } }
پاسخ
{ "data": { "movies": [ { "title": "Top Movie 1" }, { "title": "Top Movie 2" }, { "title": "Top Movie 3" } // ... other 7 movies ] } }
ممکن است یک مورد استفاده برای واکشی ردیفها از افست داشته باشید، مانند فیلمهای 11-20 که بر اساس رتبهبندی مرتب شدهاند.
پرس و جو
query Movies11to20 { movies(orderBy: [{ rating: DESC }], limit: 10, offset: 10) { # graphql: list the fields from the results to return title } }
پاسخ
{ "data": { "movies": [ { "title": "Movie 11" }, { "title": "Movie 12" }, { "title": "Movie 13" } // ... other 7 movies ] } }
در کوئری ها از نام مستعار استفاده کنید
Data Connect از نام مستعار GraphQL در کوئری ها پشتیبانی می کند. با نام مستعار، نام داده هایی را که در نتایج یک پرس و جو برگردانده می شوند، تغییر می دهید. یک کوئری Data Connect می تواند چندین فیلتر یا عملیات پرس و جوی دیگر را در یک درخواست کارآمد به سرور اعمال کند و به طور موثر چندین «پرس و جوی فرعی» را همزمان صادر کند. برای جلوگیری از تصادم نام در مجموعه داده برگشتی، از نام مستعار برای متمایز کردن پرس و جوهای فرعی استفاده می کنید.
در اینجا یک پرس و جو وجود دارد که در آن یک عبارت از نام مستعار mostPopular
و leastPopular
استفاده می کند.
پرس و جو
query ReviewPopularitySpread($genre: String) { mostPopular: review( first: { where: {genre: {eq: $genre}}, orderBy: {popularity: DESC} } ), leastPopular: review( last: { where: {genre: {eq: $genre}}, orderBy: {popularity: DESC} } ) }
پاسخ
{ "data": { "mostPopular": [ { "popularity": 9 } ], "leastPopular": [ { "popularity": 1 } ] } }
از فیلترهای پرس و جو استفاده کنید
پرس و جوهای Data Connect به تمام فیلترهای رایج SQL و عملیات سفارش نگاشت می شوند.
با عملگرهای orderBy
با where
فیلتر کنید
تمام ردیف های منطبق از جدول (و پیوندهای تودرتو) را برمی گرداند. اگر هیچ رکوردی با فیلتر مطابقت نداشته باشد، آرایه خالی را برمیگرداند.
پرس و جو
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 } }
پاسخ
{ "data": { "mostPopular": [ { "id": "some-uuid", "title": "Example Movie Title", "genre": "Action", "description": "A great movie" } ] } }
با آزمایش مقادیر تهی فیلتر کنید
می توانید مقادیر null
را با استفاده از عملگر isNull
تست کنید.
پرس و جو
query ListMoviesWithoutDescription { movies(where: { description: { isNull: true }}) { id title } }
پاسخ
{ "data": { "movies": [ { "id": "some-uuid", "title": "Example Movie Title" }, { "id": "another-uuid", "title": "Another Movie Title" } ] } }
برای اپراتورهای بیشتر، راهنمای مرجع انواع اشیاء ورودی را ببینید.
فیلتر با مقایسه ارزش
می توانید از عملگرهایی مانند lt
(کمتر از) و ge
(بزرگتر یا مساوی) برای مقایسه مقادیر در جستارهای خود استفاده کنید.
پرس و جو
query ListMoviesByRating($minRating: Int!, $maxRating: Int!) { movies(where: { rating: { ge: $minRating, lt: $maxRating }}) { id title } }
پاسخ
{ "data": { "movies": [ { "id": "some-uuid", "title": "Example Movie Title" }, { "id": "another-uuid", "title": "Another Movie Title" } ] } }
فیلتر با includes
و excludes
عملگرها برای فیلدهای آرایه
می توانید آزمایش کنید که یک فیلد آرایه شامل یک آیتم مشخص شده باشد.
مثال زیر عملگر includes
نشان می دهد.
Data Connect includesAll
، excludes
، excludesAll
و موارد دیگر را پشتیبانی می کند. همه این عملگرها را برای اعداد صحیح، رشته ها، تاریخ ها و سایر انواع داده در سرفصل های _ListFilter
مستندات مرجع بررسی کنید.
پرس و جو
query ListMoviesByTag($tag: String!) { movies(where: { tags: { includes: $tag }}) { # graphql: list the fields from the results to return id title } }
پاسخ
{ "data": { "movies": [ { "id": "some-uuid", "title": "Example Movie Title" } ] } }
فیلتر با عملیات رشته و عبارات منظم
جستارهای شما می توانند از عملیات جستجو و مقایسه رشته ای معمولی از جمله عبارات منظم استفاده کنند. توجه داشته باشید برای کارایی شما چندین عملیات را در اینجا دسته بندی می کنید و آنها را با نام مستعار رفع می کنید.
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
عملگر فیلتر کنید
_or
برای منطق پیچیده تر استفاده کنید. Data Connect همچنین از اپراتورهای _and
و _not
پشتیبانی می کند.
پرس و جو
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 } }
پاسخ
{ "data": { "movies": [ { "title": "Movie Title 1" }, { "title": "Movie Title 2" } ] } }
پرس و جوهای رابطه ای را بنویسید
کوئری های Data Connect می توانند به داده ها بر اساس روابط بین جداول دسترسی داشته باشند. شما می توانید از روابط شی (یک به یک) یا آرایه (یک به چند) تعریف شده در طرحواره خود برای ایجاد پرس و جوهای تودرتو استفاده کنید، یعنی داده های یک نوع را به همراه داده هایی از یک نوع تودرتو یا مرتبط واکشی کنید.
چنین جستارهایی از جادویی Data Connect _on_
و _via
syntax در فیلدهای خواندنی تولید شده استفاده می کنند.
به یاد داشته باشید که طرحواره نمونه را مرور کنید.
بسیاری به یک
اکنون به یک پرس و جو برای نشان دادن نحو _on_
نگاه کنید.
پرس و جو
query MyReviews @auth(level: USER) { user(key: {id_expr: "auth.uid"}) { reviews: reviews_on_user { movie { name } rating } } }
پاسخ
{ "data": { "user": { "reviews": [ { "movie": { "name": "Movie Title" }, "rating": 5 } ] } } }
یک به یک
می توانید با استفاده از نحو _on_
یک پرس و جو بنویسید.
پرس و جو
query GetMovieMetadata($id: UUID!) @auth(level: PUBLIC) { movie(id: $id) { movieMetadatas_on_movie { director } } }
پاسخ
{ "data": { "movie": { "movieMetadatas_on_movie": { "director": "Some Director" } } } }
خیلی به خیلی ها
پرس و جوهای چند به چند از نحو _via_
استفاده می کنند. یک جستجوی چند به چند ممکن است بازیگران یک فیلم مشخص را بازیابی کند.
پرس و جو
query MoviesActors($id: UUID!) @auth(level: USER) { movie(id: $id) { actors: actors_via_MovieActors { name } } }
پاسخ
{ "data": { "movie": { "actors": [ { "name": "Actor Name" } ] } } }
اما میتوانیم با استفاده از نام مستعار، یک پرسوجو پیچیدهتر بنویسیم تا بر اساس role
فیلتر کنیم تا بازیگران و فیلمهای مرتبط را در mainActors
و نتایج supportingActors
بازیابی کنیم. از آنجایی که این چند به چند است، از نحو _via_
استفاده می شود.
پرس و جو
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 } } }
پاسخ
{ "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" } ] } } }
پرس و جوهای تجمع
سنگدانه ها چیست و چرا از آنها استفاده می کنیم؟
فیلدهای انبوه به شما امکان می دهد محاسبات را روی لیستی از نتایج انجام دهید. با فیلدهای انبوه، می توانید کارهایی مانند:
- میانگین امتیاز یک بررسی را پیدا کنید
- کل هزینه اقلام موجود در یک سبد خرید را بیابید
- محصولی با بالاترین یا کمترین امتیاز را پیدا کنید
- تعداد محصولات موجود در فروشگاه خود را بشمارید
انباشته ها بر روی سرور انجام می شوند که مزایای زیادی را نسبت به محاسبه آنها در سمت مشتری ارائه می دهد:
- عملکرد سریعتر برنامه (از آنجایی که از محاسبات سمت مشتری اجتناب می کنید)
- کاهش هزینه های خروج داده ها (از آنجایی که شما فقط نتایج جمع آوری شده را به جای همه ورودی ها ارسال می کنید)
- امنیت بهبود یافته (از آنجایی که می توانید به مشتریان به جای کل مجموعه داده ها به داده های جمع آوری شده دسترسی داشته باشید)
طرحی مثال برای مصالح
در این بخش، به طرحی مثالی از ویترین می رویم، که برای توضیح نحوه استفاده از تجمیع ها خوب است:
type Product @table {
name: String!
manufacturer: String!
quantityInStock: Int!
price: Float!
expirationDate: Date
}
سنگدانه های ساده
_شمار برای همه فیلدها
سادهترین فیلد مجموع _count
است: تعداد ردیفهایی که با درخواست شما مطابقت دارند را برمیگرداند. برای هر فیلد در نوع شما، Data Connect فیلدهای انبوه مربوطه را بسته به نوع فیلد ایجاد می کند.
پرس و جو
query CountProducts {
products {
_count
}
}
پاسخ one
one
به عنوان مثال، اگر شما 5 محصول در پایگاه داده خود داشته باشید، نتیجه این خواهد بود:
{
"products": [
{
"_count": 5
}
]
}
همه فیلدها دارای یک فیلد <field>_count
هستند که تعداد سطرهایی که در آن فیلد دارای مقدار غیر تهی هستند را میشمارد.
پرس و جو
query CountProductsWithExpirationDate {
products {
expirationDate_count
}
}
پاسخ field_count
field_count
به عنوان مثال، اگر 3 محصول با تاریخ انقضا دارید، نتیجه این خواهد بود:
{
"products": [
{
"expirationDate_count": 3
}
]
}
_min، _max، _sum و _avg برای فیلدهای عددی
فیلدهای عددی (int، float، int64) همچنین دارای <field>_min
، <field>_max
، <field>_sum
و <field>_avg
هستند.
پرس و جو
query NumericAggregates {
products {
quantityInStock_max
price_min
price_avg
quantityInStock_sum
}
}
پاسخ _min _max _sum _avg
_min _max _sum _avg
به عنوان مثال، اگر محصولات زیر را دارید:
- محصول A:
quantityInStock: 10
,price: 2.99
- محصول B:
quantityInStock: 5
،price: 5.99
- محصول C:
quantityInStock: 20
,price: 1.99
نتیجه این خواهد بود:
{
"products": [
{
"quantityInStock_max": 20,
"price_min": 1.99,
"price_avg": 3.6566666666666666,
"quantityInStock_sum": 35
}
]
}
_min و _max برای تاریخ ها و مهرهای زمانی
فیلدهای تاریخ و مهر زمان دارای <field>_min
و <field>_max
هستند.
پرس و جو
query DateAndTimeAggregates {
products {
expirationDate_max
expirationDate_min
}
}
پاسخ _min _maxdatetime
_min _maxdatetime
به عنوان مثال، اگر تاریخ انقضای زیر را دارید:
- محصول A:
2024-01-01
- محصول B:
2024-03-01
- محصول C:
2024-02-01
نتیجه این خواهد بود:
{
"products": [
{
"expirationDate_max": "2024-03-01",
"expirationDate_min": "2024-01-01"
}
]
}
متمایز
آرگومان distinct
به شما امکان می دهد تمام مقادیر منحصر به فرد یک فیلد (یا ترکیبی از فیلدها) را دریافت کنید. به عنوان مثال:
پرس و جو
query ListDistinctManufacturers {
products(distinct: true) {
manufacturer
}
}
پاسخ distinct
distinct
به عنوان مثال، اگر تولید کنندگان زیر را دارید:
- محصول A:
manufacturer: "Acme"
- محصول B:
manufacturer: "Beta"
- محصول C:
manufacturer: "Acme"
نتیجه این خواهد بود:
{
"products": [
{ "manufacturer": "Acme" },
{ "manufacturer": "Beta" }
]
}
همچنین می توانید از آرگومان distinct
در فیلدهای انبوه استفاده کنید تا به جای آن مقادیر متمایز را جمع آوری کنید. به عنوان مثال:
پرس و جو
query CountDistinctManufacturers {
products {
manufacturer_count(distinct: true)
}
}
پاسخ distinctonaggregate
distinctonaggregate
به عنوان مثال، اگر تولید کنندگان زیر را دارید:
- محصول A:
manufacturer: "Acme"
- محصول B:
manufacturer: "Beta"
- محصول C:
manufacturer: "Acme"
نتیجه این خواهد بود:
{
"products": [
{
"manufacturer_count": 2
}
]
}
مصالح گروه بندی شده
شما با انتخاب ترکیبی از فیلدهای انبوه و غیرتجمیع روی یک نوع، یک مجموعه گروه بندی شده را انجام می دهید. این همه ردیفهای منطبق را که مقدار یکسانی برای فیلدهای غیرمجموعه دارند را با هم گروهبندی میکند و فیلدهای انبوه را برای آن گروه محاسبه میکند. به عنوان مثال:
پرس و جو
query MostExpensiveProductByManufacturer {
products {
manufacturer
price_max
}
}
پاسخ groupedaggregates
groupedaggregates
به عنوان مثال، اگر محصولات زیر را دارید:
- محصول A:
manufacturer: "Acme"
،price: 2.99
- محصول B:
manufacturer: "Beta"
،price: 5.99
- محصول C:
manufacturer: "Acme"
price: 1.99
نتیجه این خواهد بود:
{
"products": [
{ "manufacturer": "Acme", "price_max": 2.99 },
{ "manufacturer": "Beta", "price_max": 5.99 }
]
}
having
و where
با دانه های گروه بندی شده
همچنین میتوانید از آرگومان having
and where
فقط برای برگرداندن گروههایی که معیارهای ارائه شده را دارند استفاده کنید.
-
having
به شما امکان می دهد گروه ها را بر اساس فیلدهای انبوه آنها فیلتر کنید where
به شما امکان می دهد ردیف ها را بر اساس فیلدهای غیرتجمعی فیلتر کنید.
پرس و جو
query FilteredMostExpensiveProductByManufacturer {
products(having: {price_max: {ge: 2.99}}) {
manufacturer
price_max
}
}
پاسخ havingwhere
havingwhere
به عنوان مثال، اگر محصولات زیر را دارید:
- محصول A:
manufacturer: "Acme"
،price: 2.99
- محصول B:
manufacturer: "Beta"
،price: 5.99
- محصول C:
manufacturer: "Acme"
price: 1.99
نتیجه این خواهد بود:
{
"products": [
{ "manufacturer": "Acme", "price_max": 2.99 },
{ "manufacturer": "Beta", "price_max": 5.99 }
]
}
مجموع در جداول
فیلدهای انبوه را می توان در هماهنگی با فیلدهای رابطه یک به چند ایجاد شده برای پاسخ به سؤالات پیچیده در مورد داده های شما استفاده کرد. در اینجا یک طرح اصلاح شده است، با جدول جداگانه، Manufacturer
، ما می توانیم در مثال ها استفاده کنیم:
type Product @table {
name: String!
manufacturer: Manufacturer!
quantityInStock: Int!
price: Float!
expirationDate: Date
}
type Manufacturer @table {
name: String!
headquartersCountry: String!
}
اکنون میتوانیم از فیلدهای انبوه برای انجام کارهایی مانند یافتن تعداد محصولی که سازنده تولید میکند استفاده کنیم:
پرس و جو
query GetProductCount($id: UUID) {
manufacturers {
name
products_on_manufacturer {
_count
}
}
}
پاسخ aggregatesacrosstables
aggregatesacrosstables
به عنوان مثال، اگر تولید کنندگان زیر را دارید:
- سازنده A:
name: "Acme"
,products_on_manufacturer: 2
- سازنده B:
name: "Beta"
،products_on_manufacturer: 1
نتیجه این خواهد بود:
{
"manufacturers": [
{ "name": "Acme", "products_on_manufacturer": { "_count": 2 } },
{ "name": "Beta", "products_on_manufacturer": { "_count": 1 } }
]
}
نوشتن پرس و جوهای پیشرفته: از فیلدهای query
برای خواندن داده ها در عملیات چند مرحله ای استفاده کنید
موقعیتهای زیادی وجود دارد که ممکن است بخواهید پایگاه داده خود را در حین اجرای یک جهش بخوانید تا قبل از انجام، به عنوان مثال، درج یا بهروزرسانی، دادههای موجود را جستجو و تأیید کنید. این گزینه ها باعث صرفه جویی در عملیات رفت و برگشت و در نتیجه هزینه ها می شود.
Data Connect از این قابلیت پشتیبانی می کند. عملیات چند مرحله ای را ببینید.
مراحل بعدی
ممکن است علاقه مند باشید:
- ایجاد پرس و جو برای برنامه های خود با استفاده از ابزارهای کمکی هوش مصنوعی
- مجوز درخواست های خود را بر اساس راهنمای مجوز
- تماس با کد مشتری خود برای وب ، iOS ، اندروید و فلاتر .