AND / OR演算子を使用してリスト/クエリをフィルタリングする方法AWSAmplify JavaScript GraphQL

user4770804

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

しかし、私はあなたがそれをすることができるとは思いません。これに関して何らかの解決策がある場合、それは多くのことを意味します-のような洞察だけでも

  1. それがまったく機能しない場合-彼らがそれを実装しないことに決めた理由はありますか?
  2. forループを使用して呼び出す場合の方が良いでしょうか

    API.graphql(graphqlOperation(getTimePeriod、{id:id}));を待ちます。

それとも、リスト全体を取得して自分で除外したほうがよいでしょうか。そして、より良いのは効率を意味します-多分それはTimePeriodテーブルにリストされるデータの数に依存します(多くのエントリがDBから1つずつ取得する場合、少数のエントリがすべてを取得してそれを除外する場合?)

user4770804

この質問を検討しているすべての人にこんにちは-多くの調査の結果、次のように達成できることがわかりました。

     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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ