Как получить динамический доступ к именам полей, запрашиваемых в распознавателе GraphQL? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть две коллекции:

dbPosts

id: mongoose.Schema.Types.ObjectId,
title: { type: String },
content: { type: String },
excerpt: { type: String },
slug: { type: String },
author: {
   id: { type: String },
   fname: { type: String },
   lname: { type: String },
}

dbAuthors

id: mongoose.Schema.Types.ObjectId,
fname: { type: String },
lname: { type: String },
posts: [
         id: { type: String },
         title: { type: String }
       ]

Я разрешаю своего автораЗапросы выполняются следующим образом:

Query: {
    authors: (parent, root, args, context) => {
      return dbAuthor.find({});
    },
    author: (root, args, context) => {
      return dbAuthor.findById(args.id);
    },
  },

  Author: {
    posts: (parent) => {
      if(parent.posts) {
        return parent.posts;
      } else {
        return dbAuthor.find({'author.id': parent.id});
      }
    },
  }

Причина, по которой я таким образом решаю, заключается в оптимизации моих запросов MongoDB путем денормализации моих отношений.Вот цель:

Если вам нужен просто список авторов с названиями их работ, все необходимые поля находятся прямо в dbAuthors, поэтому вам не нужно искать dbPosts.Но если вам нужно больше подробностей по каждому возвращаемому сообщению, скажем, отрывкам или фрагменту, вы ищите dbPosts для следующего условия:

{'author.id': parent.id}

Но проблема в том, что ваш запрос выглядит так:

authors(id: "3") {
  fname
  lname
  posts {
    title
    excerpt
  }
}

он ломается, потому что в родительском объекте нет поля excerpt.Эту проблему можно было бы легко исправить, если бы я мог каким-то образом определить, какие поля запрашиваются в поле сообщений автора, а затем решить, будет ли достаточно значений, возвращаемых в parent.Если нет, то я мог бы продолжить поиск dbPosts со значением идентификатора автора.Является ли это возможным?Потому что в противном случае это лишило бы смысла денормализацию ваших коллекций, что Монго настоятельно рекомендует вам сделать!

1 Ответ

0 голосов
/ 19 сентября 2018

Это довольно денормализовано - данные дублируются;)

Вы, вероятно, ищете info.fieldNodes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...