Graphql-如何执行where子句

Graphql-如何执行where子句,graphql,graphql-js,Graphql,Graphql Js,我是graphql新手,正在为一个查询而挣扎。 我想通过用户的电子邮件地址返回用户 我有一个类型定义的调用V1User,它有以下字段 身份证件 电子邮件, 密码, 角色 此查询中需要更改哪些内容才能基于电子邮件返回用户 query GetAllV1User { viewer { allV1Users{ edges { node { id email role crea

我是graphql新手,正在为一个查询而挣扎。 我想通过用户的电子邮件地址返回用户

我有一个类型定义的调用V1User,它有以下字段 身份证件 电子邮件, 密码, 角色

此查询中需要更改哪些内容才能基于电子邮件返回用户

    query GetAllV1User {
  viewer {
     allV1Users{
      edges {
        node {
          id
          email
          role
          createdAt
          modifiedAt
        }
      }
    }
  }
}
我试过这个问题

    query getV1UserQuery($email: String!) {
  getV1User(email: $email) {
    id
    email
  }
}
和这些情妇在一起

{"email": "test@test.com"}
但是得到以下错误

    {
  "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" : "test@test.com"}, "password": {"eq":"te2st"}}}

我不建议在筛选子句中使用字符串“where”。不要试图模仿SQL。使用where子句尝试筛选什么。如果是电子邮件地址,则架构中的查询应包含user作为字段,email作为该字段的参数。 因此,您发送的第一个示例是正确的方法。 另外,避免使用诸如getUsers或getUser之类的动词声明查询。模式应该只使用名词声明查询

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

type User 
{
    id
    email
    createdAt
    otherStuff
}

您可以通过使用where子句和比较运算符来执行此操作


要执行此操作,您必须修改查询以获得一些参数。然后在解析器中发送请求的参数。刚刚更新的问题有错误,我正在获取。您可以为此查询提供架构代码吗?我正在使用scaphold.io创建架构-我可以将您添加到我的帐户中查看它?我从未使用过scaphold,但我相信您可以查看您的模式代码,因此可以将其发布到这里。无论如何,我的第一个猜测是,您需要更新模式中的
getV1UserQuery
query“不要试图模仿SQL”-SQL使用英语,具有熟悉的语法和句子结构(对于那些能够读/写英语的人),所以您不妨这样说“这样做会让你的团队更难摸索和合作,而不是更简单的方式“简洁和简洁是有价值的,只要它们不会消除意义或使听众难以理解。我已经用GraphQL玩了大约一周的入门游戏,每次都有一些不直观的、没有文档记录的、故意含糊不清的或只是从规范中省略的东西。