AWSAmplifyとGraphQLを初めて使用します。また、React Native Appの構築を開始したばかりです。これはとても楽しいことです!
TimePeriodsスキーマというテーブルがあります。これは次のようになります。
type TimePeriod @model {
id: ID!
name: String!
startYear: String!
endYear: String!,
artworks: [ArtWorkTimePeriod] @connection (name: "TimePeriodArtWorks") #Many to Many Relationship
artists: [ArtistTimePeriod] @connection (name: "TimePeriodArtists") #Many to Many Relationship
}
増幅によって生成されたクエリファイルには、listTimePeriodsという関数があります。
export const listTimePeriods = /* GraphQL */ `
query ListTimePeriods(
$filter: ModelTimePeriodFilterInput
$limit: Int
$nextToken: String
) {
listTimePeriods(filter: $filter, limit: $limit, nextToken: $nextToken) {
items {
id
name
startYear
endYear
artworks {
nextToken
}
artists {
nextToken
}
}
nextToken
}
}
`;
私がやろうとしているのは、これを条件でフィルタリングすることです。たとえば、IDが1、2、または3に等しいすべての期間のリストを取得したいのですが、次の方法で実行できると想定していました。
export async function GetTimePeriodsByIds(idArr=[]){
let filter = {
id: {
eq: [1,2,3]
}
};
return await API.graphql(graphqlOperation(listTimePeriods, {limit: 20, filter:filter}));
}
しかし、私はあなたがそれをすることができるとは思いません。これに関して何らかの解決策がある場合、それは多くのことを意味します-のような洞察だけでも
forループを使用して呼び出す場合の方が良いでしょうか
API.graphql(graphqlOperation(getTimePeriod、{id:id}));を待ちます。
それとも、リスト全体を取得して自分で除外したほうがよいでしょうか。そして、より良いのは効率を意味します-多分それはTimePeriodテーブルにリストされるデータの数に依存します(多くのエントリがDBから1つずつ取得する場合、少数のエントリがすべてを取得してそれを除外する場合?)
この質問を検討しているすべての人にこんにちは-多くの調査の結果、次のように達成できることがわかりました。
let filter = {
or: [
{
id: {eq:1}
},
{
id: {eq:2}
}]
};
return await API.graphql(graphqlOperation(listTimePeriods, {limit: 20, filter:filter}));
GraphQL Listを使用してANDおよびOR演算で何ができるかを知るには、ファイル内で同様の定義を行う必要があります。
input ModelTimePeriodFilterInput {
id: ModelIDInput
name: ModelStringInput
startYear: ModelStringInput
endYear: ModelStringInput
and: [ModelTimePeriodFilterInput]
or: [ModelTimePeriodFilterInput]
not: ModelTimePeriodFilterInput
}
これはbackend / api / projectname / build /schema.graphqlにあるはずです
これは、同様の方法でANDおよびORフィルターを記述できることを意味します。これがお役に立てば幸いです-AWSドキュメントがこれを理解しやすくしたいと思います
同様の質問がありますが、ここで答えが見つからない場合は、この投稿が役立つかもしれません-GraphQL:配列内のデータをフィルタリングする
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加