Запрос в массиве json столбца строк в postgres с помощью objection.js или knex.js
У меня есть столбец в моей таблице (Отзывы) называется reviewers
,
Это было определено через knex: table.json('reviewers').notNullable();
Это просто массив идентификаторов:['id1', 'id2', 'idn' ]
Я хотел бы запросить таблицу на основе и вернуть все строки, которые имеют вхождение строки, то есть 'id2'.
Я пытался сделать:
Review.query()
.whereJsonHasAny('reviewers', 'id2')
но я продолжаю получать ошибку:error: operator does not exist: json ?| text[]
Я в порядке с возвращением к raw
но я не могу сделать это, если я просто не запрашиваю столбцы не-json, а затем использую логику для фильтрации.
1 ответ
.whereJsonHasAny
работает только для проверки, есть ли у объекта ключи. Похоже, что документация objection.js ошибочна в том, что работает для элементов массива (мой плохой).
Чтобы узнать, есть ли в массиве определенные элементы, вам нужно использовать https://vincit.github.io/objection.js/
Review.query()
.isSuperSetOf('reviewers', ['id2'])