PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Xóa các đối tượng bên trong mảng NESTED JSONB bằng PostgreSQL

Chỉnh sửa ghi chú:Tôi đã hiểu sai câu hỏi. Nghĩ rằng bạn muốn xóa toàn bộ đối tượng có chứa 'RO'. Tôi đã chỉnh sửa câu trả lời chỉ để xóa id.

Có một lỗi nhỏ trong đối tượng jsonb mà bạn cung cấp. Nó có thể trông như thế này:

{
    "x1": "Americas",
    "x2": "West",
    "x3": [{
        "x_id": "sam"
    }],
    "x4": {
        "a1": true,
        "a2": false,
        "a3": [
            "xx",
            "xx"
        ],
        "a4": [
            "Josh"
        ],
        "y1": [{
                "id": "RW",
                "z2": true,
                "z3": "USER",
                "z4": [{
                    "name": "john"
                }]
            },
             {
                "id": "RO",
                "z2": false,
                "z3": "SELECT",
                "z4": [{
                    "name": "salin"
                }]
            },
            {
                "id": "DBA",
                "z2": false,
                "z3": "SELECT",
                "z4": [{
                    "name": "Samule"
                }]
            }
        ]
    }
}

Như đã nói, điều này sẽ hoạt động, nhưng hãy lưu ý - điều này sẽ thay thế tất cả các mục nhập trong bảng làm việc. Các đối tượng jsonb nằm trong trường "field".

with zd as (select ('{x4,y1,'||index-1||',id}')::text[] as path
            from table
            ,jsonb_array_elements((field->>'x4')::jsonb->'y1') 
            with ordinality arr(x,index)
            where x->>'id'='RO'
        )
        update table set field=
        field #- zd.path 
        from zd

Trân trọng,
Bjarni




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tên cột PL / pgSQL giống như biến

  2. không hiểu json_agg trong ngữ cảnh này

  3. Không tìm thấy mật khẩu cung cấp / không tìm thấy thông số vị trí PostgreSQL - Powershell

  4. Khóa và giao dịch trong các bưu điện sẽ chặn một truy vấn

  5. Làm cách nào để tôi có thể thực hiện ít hơn, lớn hơn trong các trường JSON Postgres?