GraphQL mongoose ограничивает пакетные результаты с помощью Dataloader - PullRequest
0 голосов
/ 24 октября 2018

У меня есть связь между пользователями и фотографиями.Всякий раз, когда я выбираю для всех пользователей, я также хочу получить первые 5 фотографий для каждого пользователя.Это моя схема:

type User {
  id: ID!
  username: String!
  email: String!
  photos: [Photo!]!
}

type Photo {
  id: ID!
  url: String
  thumb: String
  name: String
  postedBy: User!
}

type Query {
  allUsers: [User!]!
}

Итак, в моем резольвере у меня есть:

{
  Query: {
    allUsers: async (parent, args, { models }) => {
      return await models.User.find();
    }
  },
  User: {
    photos: async (parent, args, { models, loaders }) => {
      return loaders.photoLoader.load(parent.id);
    }
  }
}

Так что, используя dataloader, я могу пакетировать все фотографии за один запрос, но я не могу найти способ также ограничитьколичество фотографий для каждого пользователя.

const batchPhotos = async (ids) => {
  const { models: { Photo, User } } = db;

  const photos = await Photo.find({ postedBy: ids });

  // Something like Photo.find({ postedBy: ids }).limit(5) will bring 
  // first 5 results. I need to grab the first 5 for each user.

  const photoById = keyBy(photos, 'postedBy');

  return ids.map(id => photoById[id]);
}

export const photoLoader = () => new DataLoader(batchPhotos);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...