Node-Postgres中如何使用参数向嵌套jsonb对象新增或更新字段?
问题根因
你将参数占位符$1写在了字符串字面量'{variable, $1}'内部,PostgreSQL不会解析字符串内的参数占位符,只会将其当做普通文本处理,导致jsonb_set的路径参数不符合预期。
解决方案
jsonb_set的第二个参数本质是text[]类型的路径数组,改用ARRAY语法构造动态路径即可正常传入动态变量名。
修正后代码
你只需要修改SQL定义行即可:
// 原来的冗余拼接context || 也可以删掉,jsonb_set已返回完整修改后的jsonb对象 let sql = "UPDATE chatbots.A SET context = jsonb_set(context, ARRAY['variable', $1]::text[], to_jsonb($2::text)) WHERE chat_user_id IN ( "
说明
ARRAY['variable', $1]::text[]会把固定前缀variable和动态传入的变量名参数$1拼接为符合要求的路径数组,参数可以被node-postgres正常解析绑定。- 无需额外做
context || jsonb_set(...)的合并操作,jsonb_set本身就会基于原context值修改指定路径后返回完整的新jsonb对象,直接赋值即可。
内容的提问来源于stack exchange,提问作者user13128795
相关产品推荐
相关产品推荐

