sequelize.js - Sequelize : applying a where clause to a subquery

标签 sequelize.js

我试图向子查询添加一个 where 子句,但出现以下错误。我试图做的事情是不可能的吗?

Error: Support for literal replacements in the `where` object has been removed.

models.Message.findAll({
    attributes:  ['createdAt', 'content',
      [
        sequelize.literal(`
            RANK() OVER (
              PARTITION BY DATE_FORMAT('createdAt', '%Y-%m-%d') 
              ORDER BY createdAt DESC
        )`),
        'ranked',
      ]],
      where: [sequelize.literal('ranked') <= 3]
  })

作为引用,这是我尝试在sequelize 中复制的工作MySql 查询。

SELECT * FROM (
    SELECT 
        createdAt,
        content,
        RANK() OVER (
            PARTITION BY DATE_FORMAT(`createdAt`, '%Y-%m-%d') 
            ORDER BY createdAt DESC
            ) AS ranked 
    FROM
        communication_hub.Messages
    ORDER BY createdAt DESC
    ) AS messages
    WHERE ranked <= 3;

最佳答案

我想你应该使用 sequelize.wheresequelize.literal 与某些条件结合起来:

where: sequelize.where(sequelize.literal('ranked'), '<=',  3)

关于sequelize.js - Sequelize : applying a where clause to a subquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64775013/

相关文章:

javascript - 如何将 Promise 与嵌套 foreach 一起使用

mysql - Sequelize - 将两个 bool 属性合并为一个别名

node.js - 类型错误 : Cannot read property 'define' of undefined

sequelize.js - Sequelize 查询 - 比较两列中的日期

mysql - 使用 Mysql 数据库在 Node.js 中手动创建用户时出错“TypeError : User. findById is not a function

express - 如何修改 Sequelize 迁移

javascript - 序列化多个外键

javascript - 如何访问 Sequelize 对象的运算符属性?

mysql - 发送 put 请求时,updatedAt 列未使用最新日期时间更新

javascript - 使用 Sequelize 保存对象