Select 按给定变量

Select by given variable

我的 mongo 数据库数据:

{
    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 });
},

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

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

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

还有当我输入时:

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

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

它可能看起来像这样:

查询:

`
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);
}

...

您可以将 Query

中的 id 替换为 _id
{
    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 方法调用中的查询查找。