如何将 postgres 值添加到 jsonB 中的数组[重复]

问题描述 投票:0回答:1

有jsonB的大概结构:

“一”:{ “结果”:10, “价值观”: [ {“日期”:“2024'-11-10”, “问题”:5}, “日期”:“2024'-11-11”, “问题”:10} ]

您需要向值字段添加另一个对象。 {“日期”:“2024'-11-12”, “问题”:1}

而且它起作用了 “一”:{ “结果”:10, “价值观”: [ {“日期”:“2024'-11-10”, “问题”:5}, “日期”:“2024'-11-11”, “问题”:10}, “日期”:“2024'-11-12”, “问题”:1} ]

我找不到解决办法

postgresql jsonb
1个回答
0
投票

有多种方法可以实现所描述的结果。一种方法是使用

JSONB_INSERT
追加到
values
数组。

WITH
  t (test_value) AS (
    VALUES
      ('{
          "a": {
            "result": 10,
            "values": [
              {
                "date": "2024-11-10",
                "question": 5
              },
              {
                "date": "2024-11-11",
                "question": 10
              }
            ]
          }
        }'::JSONB
      )
  )
SELECT
  JSONB_INSERT(
    t.test_value,
    '{a, values, -1}',
    '{"date": "2024-11-12", "question": 1}',
    TRUE
  )
FROM
  t;

JSONB_INSERT
的调用用于查找
values
数组,并在最后一个元素之后插入新的 JSONB 对象(请参阅 表 9.49.JSON 处理函数,了解“JSONB_INSERT”的说明)。

结果是:

{
  "a": {
    "result": 10,
    "values": [
      {
        "date": "2024-11-10",
        "question": 5
      },
      {
        "date": "2024-11-11",
        "question": 10
      },
      {
        "date": "2024-11-12",
        "question": 1
      }
    ]
  }
}

此方法应该适用于所有当前支持的 PostgreSQL 版本(使用 v16 和 v17 进行测试)。

© www.soinside.com 2019 - 2024. All rights reserved.