Node.js Sequelize:获取子查询/原始查询作为包含的模型
我已经看过Sequelize文档,但找不到任何有用的东西 我想做的是在Node.js Sequelize:获取子查询/原始查询作为包含的模型,node.js,sequelize.js,Node.js,Sequelize.js,我已经看过Sequelize文档,但找不到任何有用的东西 我想做的是在include中添加原始查询或自定义模型,可以吗 model.Post.findAll({ include: [{ model: model.User, attributes: ['fullname', 'profilepic'], }, {
include
中添加原始查询或自定义模型,可以吗
model.Post.findAll({
include: [{
model: model.User,
attributes: ['fullname', 'profilepic'],
},
{
model: model.PostComments,
},
{
model: "Raw Query"
}
]
}
我想要实现的是:
Select post_id, count(*) as total_likes from post_likes group by post_id
我不能通过简单地使用include
来实现这一点,所以我要做的是从上面的查询创建一个表/模型,然后在include中使用它
如果我使用带有include
的group by,它将从顶层提供group by,我只想将group
by应用于post_-like
表
如果发现混淆或不清楚,请告诉我。您可以使用
Model.findAll({
attributes: [[models.sequelize.literal('CASE WHEN "field1" = true THEN 55
ELSE 23 END'), 'field3']]
}
或
Model.findAll({
attributes: { include: [[models.sequelize.literal('CASE WHEN "field1" = true THEN 55 ELSE 23 END'), 'field3']]}
}
我也希望这样做,使用原始查询在包含中动态生成,但是没有模型就无法使用包含 为了我的MySQL,我将我的内部连接(include)转换为where in。我在做内部连接以避免异常
此版本的MySQL还不支持'LIMIT&IN/ALL/ANY/SOME子查询
。我得到这个异常是因为我有一个应用了LIMIT的子查询
如果它对任何人都有帮助:
let rows = await j_model.findAll({
attributes: [...j_columns, `${association}.meta_key_id`],
include: [
{
model: um_model,
as: association,
attributes: ['um_id'],
on: {'j_id' : {$col: 'j.j_id'} }
],
where: {'j_id': {$in: sequelize.literal(`(SELECT * FROM (${massive_inner_raw_query}) as tmp)`)}},
logging: console.log
});
真正的魔法在这一行:
where: {'j_id': {$in: sequelize.literal(`(SELECT * FROM (${massive_inner_raw_query}) as tmp)`)}}
SELECT*FROM将删除该异常,并允许我执行where in而不是所需的内部联接。也许你可以用类似的方法来解决你的问题 你找到解决方案了吗?@pkyeck,没有:(,我最终使用了原始查询。不要认为这是可以做到的,这些是选项,包括一个现有模型作为它的一部分。