Последовательность подсчета связанных записей с отдельными

Я пытаюсь подсчитать связанные записи, используя отдельный атрибут в моих включениях, чтобы повысить производительность (без него запрос занимает 5 секунд). Но я получаю следующую ошибку:

сообщение: отсутствует запись FROM-предложения для таблицы LikePosts

Извините за плохой английский, это не мой первый. Я надеюсь, что вы понимаете и можете мне помочь.

Мой код:

@Query((returns) => [Post], {
  nullable: true
})
async getAllFeedPostsByUserId(@Arg('user_id') user_id: number): Promise < Post[] > {
  const result = await Post.findAll({
    attributes: {
      include: [
        [Sequelize.fn("COUNT", Sequelize.col("likedPosts.feed_post")), "likesAmount"]
      ]
    },
    include: [{
      model: LikedPosts,
      as: 'likedPosts',
      attributes: [],
      separate: true,

    }, ]
  });

  return result;
}


person Eduardo Ribeiro    schedule 27.08.2020    source источник


Ответы (1)


Я думаю, что группа необходима для подсчета записей.

Post.findAll({
    attributes: { 
        include: [[Sequelize.fn('COUNT', Sequelize.col('likedPosts.feed_post')), 'likesAmount']] 
    }, 

    include: [{
        model: LikedPosts, 
        attributes: []
    }],
    group: ['likedPosts.feed_post'] // groupBy is necessary else it will generate only 1 record with all rows count
})

Я вижу seperate

отдельное описание

Чтобы уточнить: по умолчанию для извлечения связанного экземпляра модели Sequelize будет использовать SQL JOIN. Включив функцию разделения, Sequelize выполнит отдельный запрос для каждой из связанных моделей и соединит полученные документы в коде (вместо того, чтобы позволить базе данных выполнить соединение).

person xMayank    schedule 27.08.2020
comment
Я попытался добавить группу, но ошибка сохраняется. Думаю проблема в отдельном атрибуте, без него счетчик работает. - person Eduardo Ribeiro; 27.08.2020
comment
добавлена ​​информация об отдельных - person xMayank; 27.08.2020
comment
Я понял, что отдельный не позволит мне создать счет таким образом. Но я не знаю другого способа сделать это с помощью sequenceize. - person Eduardo Ribeiro; 27.08.2020