Sequelize, MySQL - фильтрация строк в таблице по значениям столбцов JSON

1

Нужна помощь в определении того, как фильтровать строки в столбце JSON таблицы MySQL с вложенными значениями, используя Sequelize. Документация не имеет (Только для 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 способ использования sequelize.literal, но есть способ не использовать эту функцию.

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

Как добавить несколько условий в вышеупомянутом случае, например -

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

Теги:
sequelize.js

1 ответ

3
Лучший ответ

Необходимо использовать Sequelize.Op

Пример:

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

Sequelize (Операторы)

  • 0
    Большое спасибо! Работал отлично. Кроме того, в любом случае, чтобы исключить использование буквального?
  • 0
    Может использоваться sequelize.col sequelize.where (sequelize.col ('profile-> user.first_name'), {[Op.like]: sequelizeFilters.search,}),
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню