Sequelize Wrap столбец с "в где условие - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть столбец JSONB в БД.

Я хотел бы получить запрос к БД, где я могу проверить, является ли какое-либо значение в этом JSON истинным или ложным:

SELECT *
FROM table
WHERE ("json_column"->'data'->>'data2')::boolean = true AND id = '00000000-1111-2222-3333-456789abcdef'
LIMIT 1

Итак, мой запрос на сиквелизацию:

const someVariableWithColumnName = 'data2';
Model.findOne({
  where: {
    [`$("json_column"->'data'->>'${someVariableWithColumnName}')::boolean$`]: true,
    id: someIdVariable,
  },
  order: [/* some order, doesn't matter */],
})

И сиквелизат генерирует неверный результат, например:

SELECT *
FROM table
WHERE "(json_column"."->'data'->>'data2')::boolean" = true AND id = '00000000-1111-2222-3333-456789abcdef'
LIMIT 1

Разделить мой столбец на . и добавить " к каждому элементу.

Любая идея, как избавиться от добавления " в столбец, где условие?

Редактировать: Вот мой запрос с sequelize.literal():

const someVariableWithColumnName = 'data2';
    Model.findOne({
      where: {
        [sequelize.literal(`$("json_column"->'data'->>'${someVariableWithColumnName}')::boolean$`)]: true,
        id: someIdVariable,
      },
      order: [/* some order, doesn't matter */],
    })

1 Ответ

0 голосов
/ 11 декабря 2019

Вы можете использовать Sequelize.literal(), чтобы избежать ложных кавычек. ИМХО, может оказаться полезным включение обработки json в функцию db.

...