0

使用 feathersJs/Knex 和 Postgresql。

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

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

如何在羽毛/knex 服务中实现此请求?我尝试的一切都会引发Bad Request错误。

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

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

4

1 回答 1

2

Knex 对该运算符没有任何特定支持。基于 knex 构建的 Objection.js 支持 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' }
于 2019-05-07T12:06:07.443 回答