如何在GraphQL中搜索字符串值

Jas*_*son 32 graphql

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

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

select * from users where first_name like "jason%"

hel*_*fer 49

简短的回答是:你没有.

更长的答案是你必须自己编写代码.GraphQL不是像SQL这样的数据库查询语言,它是一种应用程序查询语言.这意味着GraphQL不会让您直接编写任意查询.它仅支持GraphQL架构中定义的查询类型.

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

a)在模式中声明,以及b)编写一个获取数据的解析函数

例如,您可以拥有此架构:

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

type User {
  firstName: String
  lastName: String
}
Run Code Online (Sandbox Code Playgroud)

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

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

最后编写此查询以获取与您的搜索条件匹配的所有用户的firstName和lastName列表:

{
  users(firstName: 'jason%'){
    firstName
    lastName
  }
} 
Run Code Online (Sandbox Code Playgroud)

这是我前一段时间写的一篇文章,阐述了GraphQL的一些概念:https://medium.com/apollo-stack/how-do-i-graphql-2fcabfc94a01

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

  • graphql中的Q具有误导性,不是查询语言,更像是结构语言 (5认同)

小智 5

不知道这是否与您相关,因为您希望它以“ jason”开头(即返回“ 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...
    }
  }
`;
Run Code Online (Sandbox Code Playgroud)

FWIW:我使用GraphCool BAAS做到了这一点。我不认为您使用的是GraphCool,因为GraphCool不允许在变量名中使用“ _”。

希望这可以帮助某人:)