Получить глубоко вложенные документы с GraphQL
Каков наилучший подход для извлечения глубоко вложенного объекта с помощью GraphQl только по запросу. Я говорю здесь о производительности
Допустим, у вас есть следующая схема mongo / mongoose:
User
|
|_ Name
|
|_ Friends (RefId into User)
|
|_ User
|
|_ Friends (RefId into User)
.....
Предположим, у каждого пользователя есть много друзей, у которых, в свою очередь, есть много других друзей, как бы вы решили, насколько глубоко вам нужно populate
внутри resolve
функционировать?
наивный метод "просто заполнить" может быть вредным, так как многие запросы могут просто выбрать поле name
который находится на уровне 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;
},
},
},
});