【发布时间】:2017-09-16 21:36:59
【问题描述】:
我有一个带有 jsonb 数组元素的 postgres 表,我正在尝试执行 sql 查询来提取匹配的元素。我有从 postgres 命令行界面运行的原始 SQL 查询:
select * from movies where director @> any (array ['70', '45']::jsonb[])
这将返回我正在寻找的结果(电影表中的所有记录,其中 director jsonb 元素包含输入元素中的任何元素)。
在代码中,['70, '45'] 的值将是一个动态变量,即。 fixArr 且数组长度未知。
我正在尝试将其构建到我的 Bookshelf 代码中,但找不到任何解决用例复杂性的示例。我已经尝试了以下方法,但它们都不起作用:
models.Movies.where('director', '@> any', '(array' + JSON.stringify(fixArr) + '::jsonb[])').fetchAll()
ERROR: The operator "@> any" is not permitted
db.knex.raw('select * from movies where director @> any(array'+[JSON.stringify(fixArr)]+'::jsonb[])')
ERROR: column "45" does not exist
models.Movies.query('where', 'director', '@>', 'any (array', JSON.stringify(fixArr) + '::jsonb[])').fetchAll()
ERROR: invalid input syntax for type json
有人可以帮忙吗?
【问题讨论】:
标签: sql postgresql jsonb knex.js bookshelf.js