当前位置: 首页 > 知识库问答 >
问题:

返回空字段的GraphQL嵌套查询

阎烨
2023-03-14

我正在努力学习GraphQL(

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

知道我做错了什么吗?

共有2个答案

微生俊
2023-03-14

您的语法非常适合从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({}),

您应该返回服务数组对象,以便与人一起获取该返回对象

人:()=

[{
    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',
    }, {}]
}, {}]

如果您使用mongoose,请使用聚合从mongoBD获取数据

程亦
2023-03-14

您需要传递服务中location对象的引用,该引用与您的mongoose模型相同(我假设您使用的是mongoose)。传递引用后,可以添加填充(reference)。服务查询中的exec()引用以下内容

 类似资料:
  • 我是Elasticsearch的新手,我提出了一个问题,Elasticsearch嵌套查询是否只能为嵌套字段返回匹配的嵌套文档。 对于示例,我有一个名为的类型,其中嵌套字段名为 和嵌套查询 我需要的是搜索有提到足球的评论的博客文章,每个博客文章的评论数与足球相匹配(在例子中它数为1,因为另一个评论刚刚提到篮球)。 然而,Elasticsearch似乎总是返回完整的文档,所以我如何才能实现它,或者我

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga

  • 我有以下POJO 在下面的类中,我想直接检索给定人员的嵌套字段“cars”,其名称作为参数传递,但它返回一个具有null值的列表。 但是,如果在上面的searchHits代码中,我将类更改为Person,如下所示,我将返回pojo Person,其中只填写属性“cars”(所有其他属性检索为null): 但是如何直接检索嵌套的属性车?

  • 我遇到了一些实际的问题,比如使用字段增强来处理ElasticSearch。我已经看过关于这个主题的Nest文档,但它们没有特别大的帮助,所以我的代码实际上是基于这个问题的解决方案:使用Nest Field Boosting进行弹性搜索。 如果运行以下查询,我会得到一个结果,正如预期的那样: 然而,如果我尝试使用场增强,使用以下方法,我没有得到匹配: .OnFieldsWithBoost(d=>d.

  • 以下模式在可选对象中包含非空字段(整个对象允许为空)。它定义了一个父对象的列表,这些父对象具有可选字段“孩子”——一些父对象允许具有空“孩子”。 以下GraphQL查询返回预期的父对象列表(其中一些具有null子值)。但它也返回附加到结果的错误。这是GraphQL(孩子是可选的)中的错误吗?还是预期行为?

  • 是否可以使用spring data elasticsearch返回所有elasticsearch文档的特定嵌套字段? 例如。es数据存储库将如何查找以下查询? 网址: /myIndex/MyType/_search 查询正文: