如何使用 knexjs、bookshelfjs 更新 JSONB 列

how to update JSONB column using knexjs, bookshelfjs

我在 PostgreSQL 数据库中有一个 JSONB 列,例如 {lat: value, lon: value}。我想一次更改任何特定值,例如。纬度,但我不确定如何使用 bookshelf.js 或 knex.js 实现此目的。我尝试使用 Postgres 文档中指定的 jsonb_set() 方法,但我不确定我是否使用正确。有人可以建议我该怎么做吗?或者执行此操作的正确语法是什么?谢谢

AFAIK 唯一支持从 postgresql jsonb 列写入和提取数据的基于 knex 的东西是 objection.js ORM。

使用plain 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 一起使用的更多示例,请参见以下答案

What is the best way to use PostgreSQL JSON types with NodeJS

Jsonb 字段更新使用 knex.js

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

jsonbkey 为列名,数据类型为 jsonb。

tablename 是您的 table 的名称。

city 是对象键。

如果有多层次的对象那么你可以使用点。喜欢'{city.id}'