Подтвердить что ты не робот

Graphql - Как выполнить предложение where

Я новичок в Graphql, и я борюсь с запросом. Я хочу вернуть пользователя по их адресу электронной почты

У меня есть определенный тип вызова V1User и он имеет следующие поля: id, email, password, role

Что нужно изменить в этом запросе, чтобы вернуть пользователя по электронной почте?

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

Я попробовал этот запрос

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

С этими параметрами

{"email": "[email protected]"}

Но получите следующие ошибки

    {
  "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"
    }
  ]
}

Моя схема выглядит следующим образом

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

благодаря

Здравствуй

Этот вопрос решил мою проблему

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

Наряду с этими переменными запроса

{"where": {"email": {"eq" : "[email protected]"}, "password": {"eq":"te2st"}}}
4b9b3361

Ответ 1

Вопрос обновлен с ответом, который решил эту проблему

Ответ 2

Я бы не рекомендовал использовать строку "where" в предложении фильтра. Не пытайтесь эмулировать SQL. Что вы пытаетесь отфильтровать, используя предложение where. Если это адрес электронной почты, тогда запрос в вашей схеме должен содержать пользователя в качестве поля и адрес электронной почты в качестве параметра этого поля. Итак, первый пример, который вы отправили, - это правильный способ сделать это. Кроме того, избегайте объявления запросов с использованием глаголов, таких как getUsers или getUser. Схема должна просто объявить запрос, используя существительные

Query
{
   Users(email:String):[User!]
}

type User 
{
    id
    email
    createdAt
    otherStuff
}