在嵌套对象中读取嵌套对象

Posted

技术标签:

【中文标题】在嵌套对象中读取嵌套对象【英文标题】:Reading the nested object in the nested object 【发布时间】:2018-10-12 00:15:56 【问题描述】:

我的问题是读取嵌套对象的属性,它位于其他嵌套对象中。

GraphQL

type Mapping 
    id: ID!
    partnerSegmentId: ID!
    ctSegmentId: CtSegment!


type PartnerSegment 
    id: ID!
    name: String!
    platformId: Int!
    partner: Partner!


type Partner 
    id: ID!
    name: String!

一旦我尝试像这样查询它:


  allMappings 
    partnerSegmentId 
      id
      name
      partner 
        id
      
    
  

我收到:


  "data": 
    "allMappings": [
      null
    ]
  ,
  "errors": [
    
      "message": "Cannot return null for non-nullable field Partner.name.",
      "locations": [
        
          "line": 8,
          "column": 9
        
      ],
      "path": [
        "allMappings",
        0,
        "partnerSegmentId",
        "partner",
        "name"
      ]
    
  ]

映射架构

const mappingSchema = new mongoose.Schema(
    
        partnerSegmentId: 
            type: mongoose.Schema.Types.ObjectId,
            ref: 'PartnerSegment',
            required: [true, 'Mapping must have partner segment id.']
        ,

        ctSegmentId: 
            type: mongoose.Schema.Types.ObjectId,
            ref: 'CtSegment',
            required: [true, 'Mapping must have CT segment id.']
        
    ,
     timestamps: true 
);

我尝试分别阅读 Partner、PartnerSegment 和 Mapping 模型。一切正常。知道我应该在哪里搜索问题的根源吗?我检查了 mongodb 文档,ids 看起来还不错。我想这是我的模型的错。

如果您想仔细查看,请拨打project repo。

【问题讨论】:

您是否检查过为PartnerSegment .Name 返回了哪些数据?看起来Namenull @kat1330 我将对象 ID 保存在数据库中。如果一切正常,我直接在数据库中检查并且我没有看到错误。此外,我通过这个 id 做了一个简单的选择,一切正常。一旦嵌套在其他对象中,问题就会出现。 【参考方案1】:

解决方案:

返回值中的垃圾 ID 是由嵌套实体中的填充无效引起的。我设法解决问题的方式:

const allMappings = () =>
    Mapping.find()
        .populate('user')
        .populate('ctSegment')
        .populate(
            path: 'partnerSegment',
            populate: 
                path: 'partner'
            
        )
        .exec(); 

【讨论】:

以上是关于在嵌套对象中读取嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章

在angular7中读取复杂的嵌套json对象数组

如何读取嵌套的 json 对象? [复制]

如何从配置文件中读取嵌套对象的值

如何通过 ID 从 Apollo 缓存中读取嵌套对象?

嵌套的 JSON 对象在 NodeJS 中返回 [Object] [重复]

嵌套 foreach 循环读取 .xml 并将对象写入列表