Как искать с оператором jsonb "@>" в сервисе feathers.js / knex - PullRequest
0 голосов
/ 07 мая 2019

Использование перьевJs / Knex и Postgresql.

(упрощенный) SQL-запрос:

SELECT * FROM projects WHERE team_members @> '{"members":[{"id": 1}]}';

Как я могу реализовать этот запрос в сервисе перьев / knex? Все, что я пробовал, выдает ошибку Bad Request.

Я пытался использовать rawQuery, но не смог заставить его работать. Я пытался с обычным запросом, но по умолчанию используется оператор = вместо @> (как обычно).

Я рассматриваю возможность создания отдельной службы на сервере, но мне интересно, нет ли более простого способа сделать это. Я только начал с перьев, я уверен, что что-то упустил, и это должно быть очень просто.

1 Ответ

0 голосов
/ 07 мая 2019

Knex не имеет конкретной поддержки для этого оператора. Objection.js, построенный поверх knex, поддерживает операторы jsonb, поэтому в долгосрочной перспективе его будет проще использовать https://vincit.github.io/objection.js/api/query-builder/find-methods.html#wherejsonsupersetof.

Как говорится с 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' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...