如何在feathers.js / knex服务中使用jsonb运算符“ @>”进行搜索

时间:2019-05-07 08:49:52

标签: knex.js jsonb feathersjs feathers-service

使用feathersJs / Knex和Postgresql。

(简化的)SQL查询是这样的:

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

如何在Feathers / knex服务中实现此请求?我尝试的所有操作都会引发Bad Request错误。

我尝试使用rawQuery,但无法正常工作。我尝试使用常规查询,但是默认情况下它使用=运算符而不是@>(因为这是正常的)。

我正在考虑在服务器上构建单独的服务,但我想知道是否没有更简单的方法来做到这一点。我只是从feathersJs开始,我确定我缺少一些东西,而且必须非常简单。

1 个答案:

答案 0 :(得分:0)

Knex没有对该操作员的任何特定支持。构建在knex之上的Objection.js支持jsonb运算符,因此从长远来看https://vincit.github.io/objection.js/api/query-builder/find-methods.html#wherejsonsupersetof可能更易于使用。

话虽如此,但您可以像这样:

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' }