Ограничение загруженных ленивых ассоциаций в Sequelize - PullRequest
0 голосов
/ 26 октября 2019

Я использую Sequelize 5 в качестве ORM для моего GraphQL API, но я столкнулся с проблемой производительности при запросе связанных данных.

Допустим, у меня есть Userкоторый имеет много Post с, поэтому мои определения моделей выглядят так:

class User extends Model { }
User.init({ name: Sequelize.STRING }, { sequelize });

class Post extends Model { }
Post.init({ content: Sequelize.STRING }, { sequelize });

User.hasMany(Post);

Теперь я выбрал модель User из базы данных и хочу запросить x количество сообщений отэтот пользователь. Я знаю, что могу получить все сообщения, используя user.getPosts(), но это вернуло бы гораздо больше записей, чем мне нужно.

Я нашел этот ответ , который объясняет, как применять ограничение при нетерпеливо загружая отношение, используя опцию include, но в моем случае я хотел бы ленивая загрузка отношение. Причина этого в том, как работают распознаватели GraphQL.

Итак, мой вопрос: Как получить первые x сообщений пользователя?

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Вы можете передать дополнительные опции find получателю. Это не очень хорошо задокументировано, хотя кратко упомянуто здесь . Так что вы можете просто сделать:

user.getPosts({
  limit: 10,
  offset: 100,
  where: { /* whatever */ },
  order: [ /* whatever */ ],
  transaction,
  etc.
})
0 голосов
/ 27 октября 2019

Я ожидал бы, что для этого будет более свободный интерфейс, но в настоящее время я решил это просто с помощью:

return db.models.posts.findAll({
    where: { userId: user.id },
    limit: x,
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...