You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize关联查询:保留所有Ask记录且仅包含当前用户投票

解决方案

要实现返回所有Ask记录,同时仅关联当前用户的AsksVote数据(无投票的Ask对应的asksVotes字段为空数组),只需在include配置中添加required: false参数,将默认的**内连接(INNER JOIN)改为左外连接(LEFT OUTER JOIN)**即可。

修改后的查询代码

const userId = req.params.userId;
Ask.findAll({
    limit: 10,
    order: [
        ['createdAt', 'DESC'],
    ],
    include: {
        model: AsksVote,
        where: {
            userId: userId
        },
        required: false // 关键参数:保留所有Ask记录,无匹配关联时返回空数组
    }
})
.then( response => {
    return res.status(200).json(response);
})
.catch( err => {
    return res.status(500).json(err);
});

原理说明

  • Sequelize中使用include关联模型时,默认采用内连接,这会自动过滤掉没有匹配关联数据的主模型记录(也就是没有当前用户投票的Ask会被排除)。
  • 设置required: false后,关联查询变为左外连接,会保留所有主模型(Ask)的记录,当没有匹配的AsksVote数据时,对应的关联字段会返回空数组[],完全符合预期结果。

内容的提问来源于stack exchange,提问作者theRyanMark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:49:55