source

MariaDB의 기존 JSON 개체에 새 개체를 추가하려면 어떻게 해야 합니까?

manysource 2022. 10. 14. 22:11

MariaDB의 기존 JSON 개체에 새 개체를 추가하려면 어떻게 해야 합니까?

JSON 필드에는 여러 서브 오브젝트가 포함된 오브젝트가 있습니다.표는 다음과 같습니다.

+---------+----------------------------------------------------------------+
|store_num|                           fruit_stock                          |
+---------+----------------------------------------------------------------+
| AL258   | '{"fruits":{"apple":67,"banana":91,"plum":53}}'                |
+---------+----------------------------------------------------------------+
| OR419   | '{"fruits":{"apple":109,"banana":44,"plum":98}}'               |
+---------+----------------------------------------------------------------+

준비된 문을 사용하여 "AL258" 저장소에 개체 {"mango":45}을(를)이 일을 하면서 몇 가지 문제가 생겼어요.첫 번째는 오브젝트를 다른 오브젝트에 추가하는 것이 생각만큼 간단하지 않다는 것입니다.처음에는 JSON_OBJECT() 함수를 사용하여 mango 객체를 작성해야 했습니다.

JSON_OBJECT("mango", 45)

'{"mango":45}'

그 후 "fruits" 객체의 내용을 가져와 JSON_QUERY() 함수를 사용해야 했습니다.

JSON_QUERY(fruit_stock, '$.fruits')

'{"apple":67, "banana":91, "plum":53}'

그리고 나서 새로운 망고 물체와 과일 물체의 내용물을 합쳐야 했다.삽입할 필드가 이미 존재하는 경우 대체하고 싶기 때문에 JSON_MERGE_PATCH() 함수를 사용해야 했습니다.

JSON_MERGE_PATCH(
    JSON_QUERY(fruit_stock, '$.fruits'),  -- the contents of fruit_stock: '{"apple":67,"banana":91,"plum":53}'
    JSON_OBJECT("mango", 45)              -- the new mango object: '{"mango":45}'
)

이제 벌거벗은 오브젝트 필드 '{"apple':67', 'banana':91, 'plum':53, 'mango':45'가 생겼기 때문에 이들을 'fruits' 오브젝트로 결합해야 했습니다.이를 위해서는 JSON_OBJECT() 함수를 사용하여 완전히 새로운 "fruits" 개체를 생성해야 했습니다.

JSON_OBJECT(
    'fruits',                                 -- the new fruits object
    JSON_MERGE_PATCH(                         -- the contents of fruit_stock
        JSON_QUERY(fruit_stock, '$.fruits'),  -- the new mango object
        JSON_OBJECT("mango", 45)
    )
)

'{"fruits":{"apple":67, "banana":91, "plum":53, "mango":45}}'

저장소를 선택하기 위해 WHERE 절을 추가하는 중...

UPDATE store_table SET fruit_stock = 
    JSON_OBJECT(
        'fruits', 
        JSON_MERGE_PATCH(
            JSON_QUERY(fruit_stock, '$.fruits'), 
            JSON_OBJECT("mango", 45)
        )
    ) 
WHERE HEX(store) = 'AL258';

결과는 다음 표와 같습니다.

+---------+----------------------------------------------------------------+
|store_num|                           fruit_stock                          |
+---------+----------------------------------------------------------------+
| AL258   | '{"fruits":{"apple":67,"banana":91,"plum":53,"mango":45}}'     |
+---------+----------------------------------------------------------------+
| OR419   | '{"fruits":{"apple":109,"banana":44,"plum":98}}'               |
+---------+----------------------------------------------------------------+

질문입니다.이것이 최선의 방법입니까?아니면 MariaDB를 사용하여 보다 효율적이고 읽기 쉬운 옵션이 있습니까?

를 사용하여 추가할 값에 대해 기존 jsons와 유사한 구문을 사용합니다.JSON_MERGE_PATCH()기능:

UPDATE store_table 
   SET fruit_stock = JSON_MERGE_PATCH(fruit_stock, '{"fruits":{"mango": 45}}') 
 WHERE store_num = 'AL258';

Demo

언급URL : https://stackoverflow.com/questions/59753566/how-do-you-add-a-new-object-to-an-existing-json-object-in-mariadb