1

仅在被要求时才使用 graphql 获取深层嵌套对象的最佳方法是什么。我说的是性能方面

假设您有以下 mongo/mongoose 模式:

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

      .....

假设每个用户有很多朋友,而这些朋友又有很多其他朋友,那么如何决定您需要在函数populate内部进行多深?resolve

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

提前致谢。

4

1 回答 1

1

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

使用graphqlnpm 包,实现如下所示:

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;
      },
    },
  },
});
于 2016-04-08T06:55:11.940 回答