запрос в массиве json столбца строк в postgres с помощью objection.js или knex.js - PullRequest
0 голосов
/ 31 мая 2018

В моей таблице (Обзоры) есть столбец с именем 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 Ответ

0 голосов
/ 31 мая 2018

.whereJsonHasAny работает только для проверки наличия ключей у объекта.Похоже, что документация objection.js ошибочна в том, что работает для элементов массива (мой плохой).

Для определения наличия в массиве определенных элементов вам нужно использовать https://vincit.github.io/objection.js/#wherejsonsupersetof

Review.query()
  .isSuperSetOf('reviewers', ['id2'])
...