我在我的 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"]')
有人可以帮忙吗?我很困惑。
处理 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 包含检查 (@>)。