У меня есть JSON столбец, в котором хранится документ. Я хочу выполнить атомы c ОБНОВЛЕНИЯ для этого столбца.
Дано, например, значение:
[{"substanceId": 182, "text": "substance_name_182"}, {"substanceId": 183, "text": "substance_name_183"}]
и обновление
[{"substanceId": 182, "text": "substance_name_182_new"}, {"substanceId": 184, "text": "substance_name_184"}]
Я ожидаю получить это:
[{"substanceId": 182, "text": "substance_name_182_new"}, {"substanceId": 183, "text": "substance_name_183"} {"substanceId": 184, "text": "substance_name_184"}}]
Ни один из JSON_MERGE_PATCH
или JSON_MERGE_PRESERVE
напрямую не позволяет мне достичь этого. JSON_MERGE_PATCH
не знает, substanceId
является идентификатором документа. Есть ли способ достичь этого на стороне MySQL? Я мог бы сделать это на стороне клиента (сначала получить значение, изменить и обновить его), но это в крайнем случае, во-первых, у меня есть множество строк для обновления, где все они будут охвачены UPDATE
с предложением WHERE
, поэтому способ MySQL был бы более удобным. Когда вы делаете это на стороне клиента и делаете это безопасно, мне придется заблокировать много строк НА ОБНОВЛЕНИЕ.
Например, запрос:
SELECT JSON_MERGE_PATCH(
'[{"substanceId": 182, "text": "substance_name_182"}, {"substanceId": 183, "text": "substance_name_183"}]',
'[{"substanceId": 182, "text": "substance_name_182_new"}, {"substanceId": 184, "text": "substance_name_184"}]'
) v;
результаты
[{"text": "substance_name_182_new", "substanceId": 182}, {"text": "substance_name_184", "substanceId": 184}]