我正在尝试学习GraphQL(和node.js和MongoDB等)。我无法获得这个简单的嵌套查询来返回结果:
query getLocationByPerson {
People {
firstName
lastName
service {
location
}
}
}
我只获得第一级字段,例如:
{
"data": {
"People": [
{
"firstName": "xxx",
"lastName": "XXXXX",
"service": null
}
}
这是我的模式:
type Query {
People: [PeopleObject]!
PeopleByName(lastName: String!): [PeopleObject]
PeopleByID(id:ID!): [PeopleObject]
Service: [ServiceObject]
ServiceByID(id:ID!): [ServiceObject]
}
type PeopleObject {
id: ID!
Xid: String!
firstName: String!
lastName: String!
email: String!
serviceId: String
apps: [String]
service: [ServiceObject]
}
type ServiceObject {
id: ID!
name: String!
location: String!
}
还有我的解析器:
const queries = {
People: () => People.find({}),
PeopleByName: (root,args,context,info) => People.find({lastName: args.lastName}),
PeopleByID: (root,args,context,info) => People.find({_id: args.id}),
Service: () => Service.find({}),
ServiceByID: (root,args,context,info) => Service.find({_id: args.id})
};
知道我在做什么错吗?
答案 0 :(得分:0)
您需要传递服务中的位置对象的引用,该引用与您的猫鼬模型相同(我假设您使用的是猫鼬)。传递引用后,您可以在服务查询Refer this
中添加populate(refernce).exec()答案 1 :(得分:0)
您的语法对于从graphql获取任何数据都非常有用
type Query {
People: [PeopleObject]!
}
type PeopleObject {
id: ID!
Xid: String!
firstName: String!
lastName: String!
email: String!
serviceId: String
apps: [String]
service: [ServiceObject]
}
type ServiceObject {
id: ID!
name: String!
location: String!
}
为简单起见
type Query {
People: [{
id: ID!
Xid: String!
firstName: String!
lastName: String!
email: String!
serviceId: String
apps: [String]
service: [{
id: ID!
name: String!
location: String!
}]
}]!
}
但是您只返回了人
People: () => People.find({}),
您应该返回服务数组对象以使用People获取该返回对象
People: () =>
返回类似下面的结果。
[{
id: '5c5ac87e5e4d85ae77de9c50'
Xid: 'xx'
firstName: 'yyy'
lastName: 'zzz'
email: 'xxx@gmail.com'
serviceId: '5c5ac87e5e4d85ae77de9c51'
apps: ['testing', 'google']
service: [{
id: 5c5ac78d5e4d85ae77de9c4f,
name: 'Tester',
location: 'US America',
}, {}]
}, {}]
如果使用猫鼬,请使用aggregation从mongoBD中获取数据。