需要帮助来弄清楚如何使用 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`),
},
});
关于javascript - Sequelize,MySQL - 使用 JSON 列值过滤表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52290123/