Как искать с оператором jsonb "@>" в сервисе feathers.js/knex
Использование перьев Js/Knex и Postgresql.
(Упрощенный) SQL-запрос таков:
SELECT * FROM projects WHERE team_members @> '{"members":[{"id": 1}]}';
Как я могу реализовать этот запрос в сервисе перьев /knex? Все, что я пытался бросить Bad Request
ошибка.
Я пытался использовать rawQuery, но не смог заставить его работать. Я пытался с обычным запросом, но по умолчанию =
оператор вместо @>
(как это нормально).
Я рассматриваю возможность создания отдельной службы на сервере, но мне интересно, если нет более простого способа сделать это. Я только начал с перьев, я уверен, что что-то упустил, и это должно быть очень просто.
1 ответ
Knex не имеет конкретной поддержки для этого оператора. Objection.js, построенный поверх knex, поддерживает операторы jsonb, поэтому в долгосрочной перспективе может быть проще использовать https://vincit.github.io/objection.js/api/query-builder/find-methods.html.
При этом с помощью knex вы можете сделать это следующим образом:
knex('projects').whereRaw(`?? @> ?::jsonb`, [
'team_members',
JSON.stringify({members:[{id: 1}]})
])
Который создает следующий запрос:
{ method: 'select',
bindings: [ '{"members":[{"id":1}]}' ],
sql: 'select * from "projects" where "team_members" @> ?::jsonb' }