带有 Knex 的 Postgres - 查询数组包含特定值的位置

Postgres with Knex - query where an array contains a particular value

令人惊讶的是,我一直无法弄清楚如何 return 具有使用 knex 包含特定值的数组的 table。我在 Postgres 文档中看到这是可能的。

在sql

SELECT ... FROM fdt WHERE c1 IN (1, 2, 3)

但我找不到如何使用 knex 完成此操作。网上的一个建议是使用 whereIn.

所以我尝试了

knex.from('pin_table').select('*').whereIn('likes_recieved', id)
 .whereIn('likes_sent', id)

(我也试过 whereIn 数组和搜索参数切换像 .whereIn(id, 'likes_recieved')

但我一直收到语法错误:

"select * from "pin_table" where "10" in  and "10" in  - syntax error at or near ""

谁能告诉我如何用 knex 或 knex.raw 做到这一点?

谢谢

这有点取决于您是否使用 ARRAY 类型,或者 likes_sent 是否是从子查询等构建的。如果它是一个数组,您可能需要使用 ANY:

knex.from('pin_table').whereRaw('? = ANY(likes_received)', id);

这是在没有看到您的架构的情况下的最佳猜测。通常我会想使用一个单独的 table 而不是 Postgres 数组:

knex('pin_table as p')
  .join('likes as l', 'p.id', 'l.pin_id')
  .where('l.user_id', id);

有关 Postgres 数组的潜在缺陷和优势的讨论,请参阅 。