Node.js Sequelize:获取子查询/原始查询作为包含的模型

Node.js Sequelize:获取子查询/原始查询作为包含的模型,node.js,sequelize.js,Node.js,Sequelize.js,我已经看过Sequelize文档,但找不到任何有用的东西 我想做的是在include中添加原始查询或自定义模型,可以吗 model.Post.findAll({ include: [{ model: model.User, attributes: ['fullname', 'profilepic'], }, {

我已经看过Sequelize文档,但找不到任何有用的东西

我想做的是在
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,没有:(,我最终使用了原始查询。不要认为这是可以做到的,这些是选项,包括一个现有模型作为它的一部分。