如何查询动态数量的别名?

时间:2016-12-21 09:36:49

标签: javascript node.js graphql graphql-js

假设我有这样的GraphQL Schema:

Schema {
  user($id: ID) {
    id: ID
    name: String
  }
}

我知道如何通过他的ID查询一个用户,我可以使用别名来查询几个用户,如下所示:

GetSomeMore {
  john: user(id: "123") {
    name
  }
  mary: user(id: "321") {
    name
  }
}

但是,假设我只有一个用户ID列表,并希望查询每个用户ID的名称。我该怎么写这样的查询?

我可以提出的方法是动态生成包含user1user2等别名的查询,或者在服务器上实现users(ids: [ID])边缘。但我觉得应该有更好的解决方案。有吗?

(PS:我的代码示例可能存在语法错误,我将其更多地写为伪代码,以便了解我的观点。)

2 个答案:

答案 0 :(得分:2)

我会选择你的最后一个命题:

Schema {
  users($ids: [ID]) {
    id: ID
    name: String
  }
}

使用像:

这样的解析器
const users = async (root, { ids }) => await knex('users').whereIn('id', ids)

注意:我使用 + + 来创建我的架构,我的类型和解析器。

答案 1 :(得分:2)

您可以将该功能作为模式的一部分来实现,例如id_in: [String]查询的users参数。

在Graphcool中,我们使用filter参数来公开这样的功能。例如,您的查询可以这样完成:

query {
  allUsers(filter: {id_in: ["123", "321"]}) {
    id
    name
  }
}

结果

{
  "data": {
    "allUsers": [
      {
        "id": "123",
        "name": "John"
      },
      {
        "id": "321",
        "name": "Mary"
      }
    ]
  }
}

要详细了解filter参数检查the documentation