按给定变量选择

时间:2017-03-10 00:19:25

标签: javascript meteor graphql apollo-server

我的mongo db数据:

{
    username: 'gemmi',
    age: 14,
    id: 'xsxsxsxsxss'
}

输入查询:

{
  type Query {
    getUser(id: String, username: String): User
  }
}

分解器

getUser(root, args) {
  return Meteor.users.findOne({ _id: args.id, username: args.username });
},

我的问题是如何通过给定变量获取用户?

所以当我输入时它应该返回用户:

getUser(id: "xsxsxsxsxss", username:"gemmi") { username _id }

以及我输入时:

getUser(username:"gemmi") { username _id }

2 个答案:

答案 0 :(得分:1)

您可以将id替换为_id

中的Query
{
    type Query {
        getUser(_id: String, username: String): User
    }
}

然后您只需使用args参数即可执行findOne调用

getUser(root, args) {
    return Meteor.users.findOne(args);
}

args对象取决于您执行query调用的方式。您应该记住在通话中用id替换_id。在第一种情况下,当您执行getUser(_id: "xsxsxsxsxss", username:"gemmi")时,args对象为{ _id: 'xsxsxsxsxss', username: 'gemmi' },但在第二种情况下,当您要使用getUser(username:"gemmi")时,args对象为{ username: 'gemmi' },因此在这两种情况下,您都可以在findOne方法调用中将其用作查询查找。

答案 1 :(得分:0)

我建议您为查询添加输入类型。让流星搜索相应的用户。

看起来像这样:

查询:



`
type User {
  id: ID!
  username: String!
}
input UserInput {
  id: ID
  username: String
}
type Query {
  getUser(user: UserInput!): User!
}
`




解析器:



...

getUser(root, { user }) {
  return Meteor.users.findOne(user);
}

...