Нужна помощь в выяснении того, как фильтровать строки в столбце JSON таблицы MySQL с вложенными значениями с помощью Sequelize. В документации его нет (предоставляется только для PostgreSQL и MSSQL - ссылка)
Определение таблицы -
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'



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нужно использовать Sequelize.Op
Пример:
models.Comment.findAll({
where: {
action: 'xyz',
[Op.and]: sequelize.literal(`reference->"$.orderItemId"=2`),
},
});
Может использоваться sequelize.col sequelize.where (sequelize.col ('profile-> user.first_name'), {[Op.like]: sequelizeFilters.search,}),
Тебе понравился мой ответ? Если да, оцените это.
reference: {
[Op.and]: [{orderItemId: {[Op.eq]: 2}}]
}
Вы можете использовать ниже.
Comment.findAll({
action:'xys',
'reference.orderItemid':2
})
// oR
Comment.findAll({
action:'xys',
reference:{
orderItemId:2
}
})
Большое спасибо! Сработало отлично. Кроме того, все равно убрать использование буквального?