如何在 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 不允许在变量名称中使用“_”。
希望这对在线下的人有所帮助:)
如何在类似于 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 不允许在变量名称中使用“_”。
希望这对在线下的人有所帮助:)