Sequelize用koa2是不能限制记录的。我能怎么做?

Sequelize with koa2 can't limit the record. How can I do?

async function selectCards ({
  status,
  teamId,
  userId,
  GMTTime,
  cardId,
  page,
  pageSize
}) {
  console.log(page, pageSize)
  const teamWhere = {}
  if (teamId) {
    teamWhere.id = teamId
  }
  const cardWhere = {}
  if (GMTTime) {
    cardWhere.startAt = {
      [Op.lt]: GMTTime
    }
  }
  if (cardId) {
    cardWhere.id = cardId
  }
  const userCardWhere = {
    userId
  }
  if (status) {
    userCardWhere.status = status
  }
  const result = await User.findOne({
    where: {
      id: userId
    },
    attributes: [],
    include: {
      model: Card,
      where: cardWhere,
      through: {
        where: userCardWhere
      },
      include: {
        model: Team,
        where: teamWhere,
        include: UserTeam
      }

      limit: pageSize // while it cause an error
    }
  })
  if (result == null) return { rows: [] }
  result.cards.map(card => {
    card.dataValues.status = card.user_card.status
    delete card.dataValues.user_card
    card.dataValues.team.dataValues.isAdmin = card.team.user_teams[0].isAdmin
    delete card.dataValues.team.dataValues.user_teams
    return card
  })
  return result
}

当我尝试如上所述添加限制时 发生错误

Only HasMany associations support include.separate Error: Only HasMany associations support include.separate

虽然一张卡会有很多用户,一个用户可能有很多张卡 这是一个 'm:n' 协会

当我尝试使用

order: [['startAt', 'desc']]

也不行

所以我需要用更多的代码来限制它

  result.cards.sort((card1, card2) => (
    card2.startAt - card1.startAt
  ))
  const ret = result.cards.slice((page - 1) * pageSize, page * pageSize)
  return { rows: ret }

使用更多的代码不是一个好的选择,因为当数据太大时,它需要 O(nlogn) 来做 我可以通过 sequelize 得到一些解决方案吗?

对了,就是下面这个模特协会

Team.hasMany(Card, {
  onDelete: 'CASCADE'
})
Card.hasOne(User, {
  onDelete: 'CASCADE',
  foreignKey: 'publishId'
})
Card.belongsTo(Team, {
  onDelete: 'CASCADE'
})

Card.belongsToMany(User, { through: UserCard })
User.belongsToMany(Card, { through: UserCard })
User.hasMany(UserCard)
UserCard.belongsTo(User)
Card.hasMany(UserCard)
UserCard.belongsTo(Card)

您不能在包含多对多关联的父记录上使用 limit(尤其是在包含 where 的情况下)。这来自 SQL。如果您加入一个父表和一个子表,然后以这种方式添加 limit ,您将获得前 N 个混合的父子记录,而不是前 N 个包含所有子记录的父记录。是的,你可以尝试一个简单的 SQL 查询,你会得到想要的结果,但 Sequelize 无法为你构建这样的查询。 但是,您可以尝试使用 sequelize.literal (和 SQL 子查询,如 (EXISTS (SELECT 1 FROM CHILD_TABLE WHERE PARENT_ID=PARENT_TABLE.ID))。在这种情况下,您无法在同一查询中获取此子记录,但您可以使用 limit正确。之后,您可以使用父记录的 ID 列表分别获取所有子记录。