使用GraphQL获取深层嵌套文档

时间:2016-03-31 15:21:52

标签: mongodb mongoose graphql flask-graphql

只有在被要求时才能使用graphql获取深层嵌套对象的最佳方法是什么? 我在这里说 表现明智

假设你有以下mongo / mongoose架构:

User 
  |
  |_ Name
  |
  |_ Friends (RefId into User)
      |
      |_ User
          |
          |_ Friends (RefId into User)

      .....

假设每个用户都有很多朋友,而这些朋友又有很多其他朋友, 如何决定populate函数内resolve需要多深的程度?

“只是填充”的天真方法可能有害,因为许多查询可能只选择0级别的字段name,但最终会填充数据库的1/2。

提前致谢。

1 个答案:

答案 0 :(得分:1)

最好的方法是让GraphQL客户端指定它想要的嵌套数据的深度,即让客户端在询问用户的朋友时传递参数。

使用graphql npm包,实现如下:

const UserType = new GraphQLObjectType({
  name: 'NestedUser',
  fields: {
    ...
    ...
    friends: {
      type: new GraphQLList(UserType),
      args: {
        level: {
          type: GraphQLInt,
          defaultValue: 0,
        },
        ...connectionArgs,
      },
      resolve: (user, {level, ...args}) => {
        // Populate nestedFriends according to the level
        return nestedFriends;
      },
    },
  },
});