javascript - Sequelize,MySQL - 使用 JSON 列值过滤表中的行

标签 javascript mysql json sequelize.js

需要帮助来弄清楚如何使用 Sequelize 过滤 MySQL 表的 JSON 列中具有嵌套值的行。文档中没有它(仅针对 PostgreSQL 和 MSSQL - ref)

表定义-

module.exports = (sequelize, DataTypes) => {
  const Comment = sequelize.define('Comment', {
    action: DataTypes.STRING,
    type: DataTypes.STRING,
    reason: DataTypes.STRING,
    reference: DataTypes.JSON,
    active: {
      type: DataTypes.INTEGER,
      defaultValue: 1,
    },
  }, {
    classMethods: {
      associate(models) {
        Comment.belongsTo(models.User, {
          foreignKey: 'userId',
        });
      },
    },
  });
  return Comment;
};

Comments 表中引用列的值 -

{
  "orderItemId": 2,
  "xkey": 3,
  "ykey": 4
}
{
  "orderItemId": 4,
  "xkey": 1,
  "ykey": 1
}
{
  "orderItemId": 3,
  "xkey": 1,
  "ykey": 6
}
{
  "orderItemId": 2,
  "xkey": 1,
  "ykey": 0
}

如何过滤“orderItemId”为 2 的所有行。

预期的 SQL 查询

select * from Comments where reference->"$.orderItemId" = 2

找到了使用 sequelize.literal 的方法,但是有没有办法不使用这个函数。

models.Comment.findAll({
  where: sequelize.literal(`reference->"$.orderItemId"=2`),
})

如何在上述情况下添加多个条件,例如 -

reference->"$.orderItemId"= 2 and action = 'xyz'

最佳答案

需要使用Sequelize.Op

例子:

models.Comment.findAll({
    where: {
        action: 'xyz',
        [Op.and]: sequelize.literal(`reference->"$.orderItemId"=2`),
    },
});

Sequelize (Operators)

关于javascript - Sequelize,MySQL - 使用 JSON 列值过滤表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52290123/

相关文章:

javascript - 如何在 Canvas 中绘制一个形状(多边形)并在其后面放置一个图像。形状应该在顶部

javascript - JavaScript 上的导入/导出命令出现问题

mysql - phpMyAdmin 4.3 SELECT 前的红点

jquery - 使用 knockout.js 和 jqueryUI 的可排序表

javascript - requestAnimFrame 在 Chrome 中为 60FPS,在 FF 中为 1FPS

javascript - Angular ui路由器使用查询参数更改状态

mysql - 如何在 Sql View 查询中引用值

php - 如果嵌套的meta_query不正常,我该如何改进WordPress中的这个查询?

Java.lang.IllegalStateException : Already attached

php - 在展开可选值 JSON 序列化时发现 nil