Javascript 按列中的唯一值对限制进行排序
我有以下数据库结构: id(int)|用户id(int)|产品id(int)|数据(jsonb) id、用户id和产品id的组合构成主键。因此,可以有多行具有相同的产品id和用户id 数据列包含一些JSON,其中包含以下内容Javascript 按列中的唯一值对限制进行排序,javascript,postgresql,sequelize.js,Javascript,Postgresql,Sequelize.js,我有以下数据库结构: id(int)|用户id(int)|产品id(int)|数据(jsonb) id、用户id和产品id的组合构成主键。因此,可以有多行具有相同的产品id和用户id 数据列包含一些JSON,其中包含以下内容 {“item”:boolean} 我需要的查询是选择user_id=x且data-->item=true的所有行。这部分我可以做,但我需要施加一个限制。该限制不应限制返回的行数,而应限制返回的不同产品标识的数量。因此,如果我应用10的限制,我可以返回50行,如果每个唯一的产
{“item”:boolean}
我需要的查询是选择user_id=x且data-->item=true的所有行。这部分我可以做,但我需要施加一个限制。该限制不应限制返回的行数,而应限制返回的不同产品标识的数量。因此,如果我应用10的限制,我可以返回50行,如果每个唯一的产品都有5行属于用户id和item true
这是我到目前为止所拥有的,但它没有试图达到这个极限。我相信我可能需要一个子查询或GROUPBY,但我不确定如何在Sequalize中实现这一点
return this.myModel.findAll({
where: {
user_id: userId,
'data.item': true,
},
});
任何指导都将不胜感激!谢谢执行此操作的查询包括
JOIN
ing子查询:
SELECT m.*
FROM my_model m
JOIN (
SELECT DISTINCT product_id FROM model LIMIT 10
) n ON n.product_id = m.product_id
WHERE m.user_id = $1 AND (data->>'item')::boolean IS TRUE;
据我所知,Sequelize不能表示这种查询结构,尽管它可能是可行的。但看起来您至少会以这种或那种方式运行一些原始SQL。我确实需要使用原始查询选项。我看不到另一条路。谢谢你的回答