Чтение вложенного объекта во вложенном объекте - PullRequest
0 голосов
/ 02 мая 2018

Моя проблема заключается в чтении свойств вложенного объекта, который находится внутри другого вложенного объекта.

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 и идентификаторы выглядит хорошо. Я полагаю, это вина моей модели.

Если вы хотите поближе взглянуть, это репозиторий проекта .

1 Ответ

0 голосов
/ 08 мая 2018

РЕШЕНИЕ:

Идентификатор мусора в возвращаемом значении был вызван неработающим заполнением во вложенной сущности. Как мне удалось решить проблему:

const allMappings = () =>
    Mapping.find({})
        .populate('user')
        .populate('ctSegment')
        .populate({
            path: 'partnerSegment',
            populate: {
                path: 'partner'
            }
        })
        .exec(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...