如何动态地访问域是查询在GraphQL解析器的名字吗?(How to dynamically acc

2019-11-05 04:33发布

我有两个集合:

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的父对象返回现场。 这个问题可以,如果有一种方法,我可以决定被查询哪些领域对作者的帖子字段,然后决定是否值父返回就够很容易固定。 如果没有,我会再继续查找与价值作者的ID dbPosts。 可能吗? 因为如果不是,它会破坏你的反规范化收集的全部目的,一些蒙戈强烈敦促你这样做!

Answer 1:

这是相当非规范化 - 数据被复制;)

你可能寻找info.fieldNodes



文章来源: How to dynamically access the names of fields being queries in a GraphQL resolver?
标签: graphql