Graphql – How to perform where clause

graphqlgraphql-js

I am new to graphql and I am struggling with a query.
I want to return a user by their email address

I have a type defined call V1User and it has the following fields
id,
email,
password,
role

What needs to change in this query to return a user based on email?

    query GetAllV1User {
  viewer {
     allV1Users{
      edges {
        node {
          id
          email
          role
          createdAt
          modifiedAt
        }
      }
    }
  }
}

I tried this query

    query getV1UserQuery($email: String!) {
  getV1User(email: $email) {
    id
    email
  }
}

With these params

{"email": "test@test.com"}

But get the following errors

    {
  "errors": [
    {
      "message": "Unknown argument \"email\" on field \"getV1User\" of type \"Query\".",
      "locations": [
        {
          "line": 2,
          "column": 13
        }
      ],
      "name": "GraphQLError"
    },
    {
      "message": "Field \"getV1User\" argument \"id\" of type \"ID!\" is required but not provided.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "name": "GraphQLError"
    }
  ]
}

My Schema is as follows

Name        Type        Constraints 
id          ID          NonNull Unique  
modifiedAt  DateTime    NonNull 
createdAt   DateTime    NonNull 
role        String      NonNull 
password    String      NonNull 
email       String      NonNull Unique Indexed  

Thanks

Hi

This query solved my issue

query getUserForEmailAddressAndPassword($where: V1UserWhereArgs) {
  viewer {
    allV1Users(where: $where) {
      edges {
        node {
          email
          id
          createdAt
          password
          modifiedAt
          role
        }        
      }
    }
  }
}

Along with these query variables

{"where": {"email": {"eq" : "test@test.com"}, "password": {"eq":"te2st"}}}

Best Answer

You can do so by using the where clause and comparison operators.

https://hasura.io/docs/latest/graphql/core/databases/postgres/queries/query-filters.html#the-where-argument

query {
   authors (where: {articles: {rating: {_gt: 4}}}) {
     id
     name
     articles (where: {rating: {_gt: 4}}) {
       id
       title
       rating
     }
   }
 }
Related Topic