使用 objection.js 或 knex.js 在 postgres 中的字符串列的 json 数组中查询

Posted

技术标签:

【中文标题】使用 objection.js 或 knex.js 在 postgres 中的字符串列的 json 数组中查询【英文标题】:query within a json array of strings column in postgres with objection.js or knex.js 【发布时间】:2018-11-09 22:01:43 【问题描述】:

我的表(评论)中有一个名为 reviewers 的列。

它是通过 knex 定义的:table.json('reviewers').notNullable();

这只是一个 ID 数组: ['id1', 'id2', 'idn' ]

我想根据表查询并返回所有出现字符串的行,即'id2'。

我已经尝试过:

Review.query()
  .whereJsonHasAny('reviewers', 'id2')

但我不断收到错误消息: error: operator does not exist: json ?| text[]

我可以退回到raw,但我似乎无法这样做,除非我只查询非 json 列然后使用逻辑进行过滤。

【问题讨论】:

【参考方案1】:

.whereJsonHasAny 仅用于检查对象是否有键。看起来 objection.js 文档对于数组元素的工作是错误的(我的错)。

用于查找数组是否包含您需要使用的某些元素 https://vincit.github.io/objection.js/#wherejsonsupersetof

Review.query()
  .isSuperSetOf('reviewers', ['id2'])

【讨论】:

以上是关于使用 objection.js 或 knex.js 在 postgres 中的字符串列的 json 数组中查询的主要内容,如果未能解决你的问题,请参考以下文章

Objection.js 中的多对多关系

使用 Objection JS 如何使用 withGraphFetched 选择特定列

Objection.js:所有 where 子句添加后是不是可以用括号括起来?

在 Objection.js 中按急切结果计数排序记录并实现分页?

在删除表格时在 Objection.js 中保留关系图

使用 Knex.js 进行多行插入