按列中的唯一值限制限制

时间:2017-02-06 15:34:53

标签: javascript postgresql sequelize.js

我有以下数据库结构:

id(int)| user_id(int)| product_id(int)|数据(jsonb)

id,user_id和product_id的组合构成主键。因此,可以有多个行具有相同的product_id和user_id。

数据列包含一些包含以下内容的JSON { "item": boolean }

我需要的查询是选择user_id = x和data - > item = true的所有行。这部分我可以做,但我需要应用限制。限制不应限制返回的行数,而是限制返回的DISTINCT product_ids的数量。因此,如果我应用10的限制,如果每个唯一产品都有5行属于user_id并且item为true,则可以返回50行。

这是我到目前为止所做的,但它没有尝试这个限制。我相信我可能需要子查询或GROUPBY,但我不确定如何在Sequalize中实现这一点。

return this.myModel.findAll({
  where: {
    user_id: userId,
    'data.item': true,
  },
});

任何指导都将不胜感激!感谢

1 个答案:

答案 0 :(得分:1)

执行此操作的查询涉及MAMP子查询:

JOIN

据我所知,Sequelize不能代表这种查询结构,尽管inlining the subquery as a literal可能是可能的。但看起来你将以某种方式运行至少一些原始SQL。