If there is a nested array 2 levels, ARRAY_APPEND works with for loop, however, if I have to do ARRAY_REMOVE(array,array[-1]), it is not working.
Update default use keys ‘doc::1234’
SET fsLevel.secondLevel = ARRAY_REMOVE(fstLevel.secondLevel,fstLevel.secondLevel[-1])
for fstLevel within FirstLevel end
returning *;
update default
use keys ‘doc::1234’
set fstLevel.secondLevel = ARRAY scndLevel
for scndLevel in fstLevel .secondLevel
when scndLevel!= fstLevel .secondLevel [-1] end
for fstLevel in FirstLevel end
however, I am not sure how will I delete the array if post update the ARRAY_LENGTH(fstLevel.secondLevel) = 0.The below is not working
update default
use keys ‘doc::1234’
set fstLevel.secondLevel = ARRAY scndLevel
for scndLevel in fstLevel .secondLevel
when scndLevel!= fstLevel .secondLevel [-1] end //till this works
for fstLevel in FirstLevel end
unset fstLevel.secondLevel
for fstLevel in firstLevel when ARRAY_LENGTH(fstLevel.secondLevel) = 0 end //checking and unset not working
UPDATE default AS d USE KEYS "doc::1234"
SET fl.secondLevel = ARRAY_REMOVE(fl.secondLevel, fl.secondLevel[-1])
FOR fl IN d.FirstLevel END RETURNING d.*;
UPDATE default AS d USE KEYS "doc::1234"
SET fl.secondLevel = CASE WHEN ARRAY_LENGTH(fl.secondLevel) > 1 THEN ARRAY_REMOVE(fl.secondLevel, fl.secondLevel[-1]) ELSE MISSING END
FOR fl IN d.FirstLevel END RETURNING d.*;
NOTE: ARRAY_REMOVE() removes all occurrences if there is duplicates. You can use ARRAY slice
UPDATE default AS d USE KEYS "doc::1234"
SET fl.secondLevel = (CASE WHEN ARRAY_LENGTH(fl.secondLevel) > 1
THEN fl.secondLevel[0:ARRAY_LENGTH(fl.secondLevel)-1]
ELSE MISSING
END)
FOR fl IN d.FirstLevel END RETURNING d.*;