आप jsonb_array_elements() with ordinality
का उपयोग करके किसी खोजे गए तत्व की अनुक्रमणिका पा सकते हैं (नोट, ordinality
1 से शुरू होता है जबकि जेसन सरणी की पहली अनुक्रमणिका 0 है):
select
pos- 1 as elem_index
from
samples,
jsonb_array_elements(sample->'result') with ordinality arr(elem, pos)
where
id = 26 and
elem->>'8410' = 'FERR_R';
elem_index
------------
2
(1 row)
तत्व को उसकी अनुक्रमणिका के आधार पर अद्यतन करने के लिए उपरोक्त क्वेरी का उपयोग करें (ध्यान दें कि jsonb_set()
का दूसरा तर्क एक टेक्स्ट ऐरे है):
update
samples
set
sample =
jsonb_set(
sample,
array['result', elem_index::text, 'ratingtext'],
'"some individual text"'::jsonb,
true)
from (
select
pos- 1 as elem_index
from
samples,
jsonb_array_elements(sample->'result') with ordinality arr(elem, pos)
where
id = 26 and
elem->>'8410' = 'FERR_R'
) sub
where
id = 26;
परिणाम:
select id, jsonb_pretty(sample)
from samples;
id | jsonb_pretty
----+--------------------------------------------------
26 | { +
| "result": [ +
| { +
| "8410": "ABNDAT", +
| "8411": "Abnahmedatum" +
| }, +
| { +
| "8410": "ABNZIT", +
| "8411": "Abnahmezeit" +
| }, +
| { +
| "8410": "FERR_R", +
| "8411": "Ferritin", +
| "ratingtext": "Some individual text"+
| } +
| ] +
| }
(1 row)
jsonb_set()
में अंतिम तर्क true
होना चाहिए एक नया मान जोड़ने के लिए बाध्य करने के लिए यदि इसकी कुंजी अभी तक मौजूद नहीं है। हालांकि इसे छोड़ा जा सकता है क्योंकि इसका डिफ़ॉल्ट मान true
. है ।
हालांकि समवर्ती मुद्दों की संभावना नहीं है (प्रतिबंधित WHERE स्थिति और संभावित रूप से प्रभावित पंक्तियों की एक छोटी संख्या के कारण) आपको परमाणु अद्यतन में भी रुचि हो सकती है .. पोस्टग्रेज में चुनें।