所以我有这个简单的架构:
type User {
_id: String,
username: String,
age: Int,
email: String,
password: String,
}
type Query {
user(_id: String!): User,
}
解析器:
import User from './User';
export default {
Query: {
user: (_, { _id }) => User.findById(_id),
},
}
如何通过某些指定字段(例如username
,email
获取用户而不为每个字段创建查询功能(如果用户有1000个唯一字段,那么创建1000将非常痛苦)查询每种类型)?
答案 0 :(得分:2)
如果参数的名称与字段的名称相匹配,则很容易将整个args
对象作为参数传递给find()
或findOne()
:
Query: {
user: (_, args) => User.findOne(args),
},
在这种情况下,您将获得与传入的参数匹配的第一个用户并将其返回。如果您想要返回所有可能的匹配项,您可以有两个单独的查询,一个返回单个用户,另一个返回用户列表:
Query: {
user: (_, args) => User.findOne(args),
users: (_, args) => User.find(args),
},
如果有任何参数需要区别对待(例如,如果您想传入限制或添加某种分页),您可以始终使用辅助库,如lodash
或{{只提出那些论点。例如:
ramda
答案 1 :(得分:0)
您可以像这样解决您的查询
Query: {
user: (_, args) => User.findOne({
where: {
email: "Your search value"
}
}),
},
Query: {
user: (_, args) => User.findOne({
where: {
username: "Your search value"
}
}),
},
答案 2 :(得分:0)
你可以这样解决:
Query: {
async getPosts(_, { username }) {
try {
const posts = await Post.find({ username: username });
return posts;
} catch (err) {
throw new Error(err);
}
},
},