postgresql 搜索JSON对象时出现Node Postgres库错误

ua4mk5z4  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(73)

我在我的React项目中使用了node-postgress包。我试图查询我的PostgreSQL数据库,但由于某种原因,这个特定的过滤器无法使用它们的变量替换。我做错了什么吗?
首先,我的where子句位于:

await client.query(`QUERY HERE`, [VARIABLES])

字符串
导致我出现问题的具体where子句与我的对象History有关。History是一个JSON对象,包含一个记录state,它是一个包含多个状态的数组。我试图查看这个数组中是否存在特定的状态代码,如OH。

($15::text = '' OR h.history -> 'state' @> '["' || $15::text || '"]')


虽然这不起作用,但它可以:

($15::text = '' OR h.history -> 'state' @> '["OH"]')


有人能帮帮我吗?我很困惑。

vulvrdjw

vulvrdjw1#

在处理JSON数据时,您可能需要使用JSON.stringify()将JavaScript对象显式转换为JSON。编写查询以使用JSON.stringify()作为WHERE子句中的状态数组。在此情况下,$15::jsonb参数将被替换为状态数组的JSON表示。

await client.query(
  `
  SELECT *
  FROM your_table h
  WHERE ($15::text = '' OR h.history -> 'state' @> $15::jsonb)
  `,
  [JSON.stringify(["OH"])]
);

字符串
通过使用JSON.stringify([“OH”]),可以确保JavaScript数组被正确转换为JSON字符串,该字符串可用于JSONB包含检查(@>)。

相关问题