搜索 JSON 对象时 Node Postgres 库出错

问题描述 投票:0回答:1

我在我的 React 项目中使用 node-postgress 包。我正在尝试查询我的 PostgreSQL 数据库,由于某种原因,这个特定的过滤器无法使用它们的变量替换。我是不是做错了什么?

首先,我的where子句位于:

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

导致我出现问题的具体 where 子句与我的对象历史有关。 History 是一个 JSON 对象,包含一条记录、state,它是一个包含多个状态的数组。我正在尝试查看此数组中是否存在特定的状态代码,例如 OH。

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

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

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

有人可以帮忙吗?我很困惑。

javascript reactjs postgresql node-postgres
1个回答
0
投票

处理 JSON 数据时,您可能需要使用 JSON.stringify() 将 JavaScript 对象显式转换为 JSON。编写查询以对 WHERE 子句中的状态数组使用 JSON.stringify()。在此,$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 包含检查 (@>)。

© www.soinside.com 2019 - 2024. All rights reserved.