web-dev-qa-db-ja.com

graphqlクエリフィルターでOR / ANDを使用する方法、または大文字と小文字を区別しないフィルターを作成する方法は?

投稿の質問と同じように、3つの可能なシナリオで検索できる必要があります。すべて大文字、小文字、または通常の大文字小文字が必要です。

それが不可能な場合は、代わりに大文字と小文字を区別しないフィルターを実行する方法はありますか?

  allMarkdownRemark(filter: { brand: { eq: $normalBrand } }) { //==> Need more here
        edges {
            node {
                webImages {
                    url
                }
            }
        }
    }

私はこれをしている何人かの人々を見つけました:

filter: { OR: [
  {brand: { eq: $normalBrand }}, 
  {brand: { eq: $normalBrand2 }}, 
  {brand: { eq: $normalBrand3 }}
]}

しかし、それは私にはうまくいきません

5
Taylor Austin

現在、ケースに依存しない検索を使用するgraphql自体に組み込まれているものはなく、graphqlサーバーが実行しているライブラリに完全に基づいており、そのサポートを追加することを選択した場合。 graphqlクエリコードを変更できる場合は、何らかの方法でそれを自分で追加するか、それをホスト/構築している人に何らかの方法でその機能を追加するように要求できます。

ORに関しては、 https://github.com/graphql/graphql-js/issues/585#issuecomment-262402544 よりも良いとは言えません。

GraphQLは、問題の冒頭で述べた正確な理由により、AND/OR演算子をサポートしていません。つまり、どの種類のストレージにもマップされません。なぜこれらがないのかを正しく理解するには、メンタルモデルの転換が必要だと思います。 GraphQLは、データベース言語よりもRPC言語に似ていると考えています。

メンタルモデルの変化を理解するために、プログラミング言語の関数呼び出しのようなフィールドや引数について考えると便利です。したがって、javascriptについて同様の質問をするとします。なぜ入力できないのですか:getCaseByStatus("open" OR "closed")?答えは、JavaScriptがこのコンテキストでORが何を意味するのかを知らないためです。値"open"および"closed"何らかの方法で組み合わせて、別の値を生成しますか?関数getCaseByStatusの実行を何らかの方法で変更する必要がありますか?フィールドベースのフィルタリングの概念はJavaScriptのセマンティクスの一部ではないため、JavaScriptは確信が持てません。 .。

4
Thymine