加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 如何将JSON对象推送到JSONB列中的嵌套数组

发布时间:2020-12-13 16:02:45 所属栏目:百科 来源:网络整理
导读:我需要以某种方式将 JSON对象推送到可能存在的 JSON对象的嵌套数组 – 请参阅下面的JSON代码段中的“pages”. { "session_id": "someuuid","visitor_ui": 1,"pages": [ { "datetime": "2016-08-13T19:45:40.259Z","duration,": 0,"device_id": 1,"url": { "p
我需要以某种方式将 JSON对象推送到可能存在的 JSON对象的嵌套数组 – 请参阅下面的JSON代码段中的“pages”.

{
    "session_id": "someuuid","visitor_ui": 1,"pages": [
        {
            "datetime": "2016-08-13T19:45:40.259Z","duration,": 0,"device_id": 1,"url": {
                "path": "/"
            }
        },{
            "datetime": "2016-08-14T19:45:40.259Z","url": {
                "path": "/test"
            }
        },// how can i push a new value (page) here??
    ]
    "visit_page_count": 2
}

我知道jsonb_set(目标jsonb,路径文本[],new_value jsonb [,create_missing boolean])(虽然仍然觉得它有点难以理解)但我想使用它,需要我首先选择整个JSONB列,以便找出“页面”中已存在多少元素以及使用jsonb_set将其推送到哪个索引,对吧?我希望在Postgres 9.5 / 9.6中有一种方法可以达到我们在编程语言中所知的相同程度. pages.push({“key”:“val”}).

使用Postgresql 9.5或9.6这是最好和最简单的方法吗?

解决方法

jsonb_set()的技巧是它修改了jsonb对象的一部分,但它返回整个对象.所以你传递了列的当前值和你想要修改的路径(这里的“页面”,作为一个字符串数组),然后你取现有的数组(my_column->’pages’)并追加||它的新对象. jsonb对象的所有其他部分保持原样.您实际上正在为列分配一个全新的对象,但这是无关紧要的,因为UPDATE无论如何都会将新行写入物理表.

UPDATE my_table
SET my_column = jsonb_set(my_column,'{pages}',my_column->'pages' || new_json,true);

如果设置为true,则可选的create_missing参数会添加“pages”对象(如果该对象尚不存在).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读