如何在 GraphQL 中搜索字符串值

How to search string values in GraphQL

如何在类似于 SQL 的 like 运算符的庄园中使用 GraphQL 进行查询?

示例:哪些用户的名字以 jason 开头?

select * from users where first_name like "jason%"

简短的回答是:你不知道。

较长的答案是您必须自己编写该代码。 GraphQL 不像 SQL 那样是一种数据库查询语言,它是一种应用程序查询语言。这意味着 GraphQL 不会让你开箱即用地编写任意查询。它将仅支持您的 GraphQL 模式中定义的查询类型。

如果您希望能够编写包含 like 的查询,您必须

a) 在架构中声明,并且 b) 编写一个获取数据的解析函数

例如,您可以使用以下架构:

type Query {
  users(firstName: String!): [User]
}

type User {
  firstName: String
  lastName: String
}

您必须为 users 字段定义以下解析函数:

{
  Query: {
    users(root, args){
      return sql.raw('SELECT * FROM `users` WHERE `firstName` LIKE ?', args.firstName);
    }
  }
}

最后编写此查询以获取符合搜索条件的所有用户的名字和姓氏列表:

{
  users(firstName: 'jason%'){
    firstName
    lastName
  }
} 

这是我不久前写的 post 文章,阐明了有关 GraphQL 的一些概念:https://medium.com/apollo-stack/how-do-i-graphql-2fcabfc94a01

这里有一个 post 解释了 GraphQL 模式和解析函数之间的相互作用:https://medium.com/apollo-stack/graphql-explained-5844742f195e

不确定这是否与您相关,因为您希望它以 "jason" 开头(即 return "jason bourne" 但不是 "bourne jason"),但我最近来了以“%Like%”的方式查询 GraphQL。对于您的用例,它看起来像这样:

export const allUsersQuery = `
  query allUsers($UserName: String!){
    allUsers(
      filter: {first_name_contains: $UserName}
    ) {
      id
      first_name
      ...INSERT_OTHER_FIELDS_HERE...
    }
  }
`;

FWIW:我使用 GraphCool BAAS 完成了此操作。我认为您没有使用 GraphCool,因为 GraphCool 不允许在变量名称中使用“_”。

希望这对在线下的人有所帮助:)