Если вам нужен доступ к полю динамического c, вы должны использовать скобки массива сразу после точки (доступ к карте), т.е. config. [V] и v должны быть строковыми или иметь строковые значения. Он вычисляет выражение в скобках массива, оно должно быть строкой, затем преобразуется в идентификатор, подставляет его и оценивает оставшуюся часть пути. Например: config. ["xyz"] ==> config.xyz, config. [f1] (f1 - "field1") ===> config.field1
Также разделенным ключом должна быть строка, а не идентификатор, т.е. "x"
INSERT INTO default VALUES ("cnfg::40792", { "config": { "160x600": { "siteId": "123455677", "size":[160,600] }, "300x250": { "siteId": "123455677", "size" : [300,250] }, "300x600": { "siteId": "123455677", "size": [300,600] } } });
UPDATE default AS a USE KEYS "cnfg::40792"
SET a.config.[v].size = SPLIT(v, "x") FOR v IN OBJECT_NAMES(a.config) END;
Обновленный массив будет иметь строки, т.е. ["160", "600"]. Если вам нужны цифры, используйте следующую команду. Если строка не может быть преобразована в число, она преобразуется в NULL.
UPDATE default AS a USE KEYS "cnfg::40792"
SET a.config.[v].size = ARRAY TO_NUMBER(v1) FOR v1 IN SPLIT(v, "x") END
FOR v IN OBJECT_NAMES(a.config) END;