使用 GraphQL 获取深层嵌套文档

Fetch deep nested documents with GraphQL

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

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

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

      .....

假设每个用户有很多朋友,而这些朋友又有很多其他朋友, 如何决定 populateresolve 函数中的深度?

"just populating" 的幼稚方法可能有害,因为许多查询可能只是 select 字段 name 处于 0 级别,但最终填充 1/2你的数据库。

提前致谢。

最好的方法是让 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;
      },
    },
  },
});