JSONB แทนที่ค่าของเฉพาะเรื่องกุญแจ Postgresql

0

คำถาม

ฉันต้องการจะแทนที่การกรองค่าของเจาะจงกุญแจในกา jsonb วัตถุอยู่ใน Postgresql:

create table content (
  id int,
  dynamic_fields jsonb
  );
  
insert into content values (0, '{
    "key1": "aaaaa text1",
    "key2": "text1",
    "key3": "blabla"}'::jsonb);

UPDATE content 
SET dynamic_fields = replace(dynamic_fields::text, 'text1', 'text2')::jsonb;

นี่รหัสที่ทำให้คนตามผล:

id |    dynamic_fields  
0  |  {"key1": "aaaaa text2", "key2": "text2", "key3": "blabla"}

แทนที่จะแทนที่ทั้งหมดที่เกิดขึ้น"text1"ฉันอยากจะแทนที่เพียงข้อความข้างในค่ายของ"key1"ยังไงฉันต้องทำมัน?

ผลของปรับปรุงควรจะเป็นอย่าง:

id |    dynamic_fields  
0  |  {"key1": "aaaaa text1", "key2": "text2", "key3": "blabla"}

ปรับปรุงที่ต้องการผล,มันไม่ได้ชัดเจนพอแล้ว

jsonb postgresql replace
2021-11-22 13:55:53
2

คำตอบที่ดีที่สุด

1

ใช้ฟังก์ชัน jsonb_build_object().

update content
set dynamic_fields = 
    dynamic_fields || 
    jsonb_build_object('key1', replace(dynamic_fields->>'key1', 'text1', 'text2'))
where dynamic_fields ? 'key1'

ทดสอบมันอยู่ใน Db<>ลื่นไหล.

2021-11-22 14:25:16

นั่นมันขอบคุณ!
Stefano De Rosso
0

คุณสามารถใช้โอเปอเรเตอร์ || ต้องติดต่อสองคน LANGUAGE ข้อมูลและสร้างใหม่ LANGUAGE งข้อมูลออกมา ตอนนี้เราสามารถใช้ || เข้าร่วมกับเก่า LANGUAGE ข้อมูลเพื่อนใหม่ LANGUAGE ข้อมูล(เช่น: {"key2": "text2"})

สาธิต

update content
set dynamic_fields = dynamic_fields || '{"key2": "text2"}'::jsonb;

พีเอส:

แล้วคุณสามารถใช้ jsonb_set ฟังก์ชันจะเปลี่ยนแปลงข้อมูลออกมา

สาธิต

update content
set dynamic_fields = jsonb_set(dynamic_fields, '{key2}', '"text2"');
2021-11-22 14:09:06

ฉันต้องการที่มีอยู่ข้อความให้อยู่ปรกติดี/เหมือนนี้ทำงานอย่างเดียวเท่านั้นถ้าคืนค่า"text1"และฉันอยากจะเปลี่ยนเป็น"text2"แต่ถ้าฉันต้อง"aaaaaa text1"และฉันอยากจะเปลี่ยนเป็น"aaaaaa text2"มันไม่ได้ผลหรอก ฉันต้องการจะแทนที่เป็นส่วนของข้อความไม่ต้องปรับปรุงข้อความ
Stefano De Rosso

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่