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

How to search with jsonb operator "@>" in feathers.js/knex service

使用 feathersJs/Knex 和 Postgresql。

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

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

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

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

我正在考虑在服务器上构建一个单独的服务,但我想知道是否有更简单的方法来做到这一点。我刚开始使用 feathersJs,我确定我遗漏了一些东西,而且它必须非常简单。

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