【问题标题】:Updating json columns in psql更新 psql 中的 json 列
【发布时间】:2021-06-12 22:29:56
【问题描述】:

我有一个包含 json 列的表。 json 值看起来像这样:

{'john': 1, 'alex' : 4, 'harry' :2}

如果我想给 john 加 1,我该怎么做呢?

【问题讨论】:

标签: postgresql postgresql-12


【解决方案1】:

demo:db<>fiddle

UPDATE mytable                                    -- 6
SET mydata = jsonb_set(                           -- 4
    mydata::jsonb,                                -- 1
    '{john}',                                     -- 2
    ((mydata ->> 'john')::int + 1)::text::jsonb   -- 3
)::json;                                          -- 5
  1. 获取您的数据。如果它是json 类型,则将其转换为jsonb 类型
  2. 您所请求元素的路径为text 数组
  3. 获取原始值。 -&gt;&gt; 操作符返回text 类型,所以要进行integer 操作,您需要将其转换为int 类型。然后添加1。必须将此结果重新转换为类型jsonb。不幸的是,int 类型不能直接转换为jsonb 类型,所以通过text 类型进行中间步骤
  4. 使用jsonb_set()更新(1)中指定的JSON对象
  5. 如果您的列是json 类型而不是jsonb,则将结果转换回json 类型
  6. 执行更新

【讨论】:

  • 谢谢。如果我有一个这样的 json 对象怎么办: {'john': {'age': 1}, 'alex' : {'age': 4}, 'harry' : {'age': 2}}
  • 类似。你只需要修改指向对象的路径:dbfiddle.uk/…jsonb_set(mydata::jsonb, '{john}', ((mydata -&gt;&gt; 'john')::int + 1)::text::jsonb)::json
猜你喜欢
  • 2020-09-25
  • 2015-12-01
  • 2020-05-22
  • 2016-09-08
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多