postgresql 如何使用knexjs、bookshelfjs更新JSONB列

oknwwptz  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(3)|浏览(159)

我在PostgreSQL数据库中有一个JSONB列,如{lat: value, lon: value}。我想一次更改任何特定值,例如稍后,但我不确定如何使用bookshelf.js或knex.js来实现这一点。我尝试使用Postgres文档中指定的jsonb_set()方法,但我不确定我是否正确使用了该方法。有人能告诉我如何才能做到这一点吗?或者正确的语法是什么?谢谢。

suzh9iv8

suzh9iv81#

AFAIK唯一一个支持向postgresql jsonb列写入数据和从其中提取数据的基于kinx的东西是objection.js ORM。
对于普通knex,需要使用raw来编写引用:

knex('table').update({
  jsonbColumn: knex.raw(`jsonb_set(??, '{lat}', ?)`, ['jsonbColumn', newLatValue])
})

您可以在此处检查生成的SQL https://runkit.com/embed/44ifdhzxejf1
原来高翔回答道:https://github.com/tgriesser/knex/issues/2264
更多如何使用jsonb_set和knex的示例可以在以下答案中找到
如何在PostgreSQL中更新jsonb列的字段?
在NodeJS中使用PostgreSQL JSON类型的最佳方式是什么

twh00eeo

twh00eeo2#

使用knex.js更新Jsonb字段

return knex("tablename").update({
        jsonbkey: knex.raw(`
        jsonb_set(jsonbkey, '{city}','"Ayodhya"')
          `)
      }).where({"id" :2020})

jsonbkey将是列名,其中数据类型为jsonb。
tablename是表的名称。
city是对象键。
如果有多个层次的对象,那么你可以使用dot.比如'{city.id}'

uurv41yg

uurv41yg3#

let result = await db().raw(`UPDATE widget 
SET name = ?,
jsonCol= jsonCol::jsonb || ?::jsonb
WHERE id = ?`, 
[name, JSON.stringify(newJsonData), id);

此knex查询通过覆盖提供给||运算符右侧的值中的特定键来帮助更新任何json列。请不要忘记使用::jsonb对值进行类型转换

相关问题