ARRAY_REPLACE if value exists, otherwise ARRAY_PUT

UPSERT INTO default VALUES("f01", { "id": 1, "sub": [ { "id": 2, "subSub": [ { "id": 3, "array": [{ 'id': 9998, 'value': 1111 }] }], "array": [{ 'id': 9999, 'value': 1111 }] } ], "array": [{ 'id': 9996, 'value': 1111 }, { 'id': 9997, 'value': 1111 }] } );

UPDATE default AS t
SET
    t.`array` = CASE WHEN 9999 NOT IN t.`array`[*].id
                   THEN ARRAY_PUT( t.`array`, { 'id': 9999, 'value': 1111 })
                   ELSE t.`array`
               END,
    tae.`value` = 222 FOR tae IN t.`array` WHEN tae.id == 9999 END,
    ta.`array` = ARRAY_PUT( ta.`array`, { 'id': 9999, 'value': 1111 })
               FOR ta IN t.sub WHEN 9999 NOT IN ta.`array`[*].id END,
    tae.`value` = 222 FOR tae IN ta.`array` FOR ta IN t.sub WHEN tae.id == 9999 END,
    ta.`array` = ARRAY_PUT( ta.`array`, { 'id': 9999, 'value': 1111 })
               FOR ta IN ts.subSub FOR ts IN t.sub WHEN 9999 NOT IN ta.`array`[*].id END,
    tae.`value` = 222 FOR tae IN ta.`array` FOR ta IN ts.subSub FOR ts IN t.sub WHEN tae.id == 9999 END;