Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
02-10-2021 06:04 PM
I have a list of with 5 elements ["normal", "normal", "normal", "1","3"] attached to the node as dElement. I access these by index as you would expect dElement[1]
But I have a condition where I will need to change one of the elements based on a match/where combination. What I am looking for apparently is the APOC equivalent of match (a {hash:'changed'}) set dElement[1] = 'abbynormal'
If I read this correctly I am going to remove the element ( apoc.coll.remove(dElement,1,1)) then insert an element apoc.coll.insertAll(dElement,1,'abbynormal') but I cannot seem to come up with the syntax that works. The combination of match and two apoc calls is defeating me.
02-10-2021 07:59 PM
Try this:
with ["normal", "normal", "normal", "1","3"] as d1
return apoc.coll.set(d1, 1, 'abbynormal') AS d2
Result:
["normal", "abbynormal", "normal", "1", "3"]
02-11-2021 06:33 AM
That would work except that I have no way to know what the rest of the list is and its been set already. When the program runs through, it sets them all to the default. As each condition is evaluated, it updates the appropriate flag in the list.When all 5 are run, the result (dElement) is passed. So on any given node, I don't know what the other 4 flags are. Otherwise I might have just used one flag.
So each of these is being set independently. I can ONLY afford to update the one. The others may have been updated by another set. The issue here is we can only pass one variable and it has to be a list. we are evaluating 5 separate conditions.
Would this work ?
with dElement as d1 return apoc.coll.set(d1,1,'abbynormal') as d2
and then update dElement = d2 ?
Thanks
02-17-2021 05:49 PM
This worked. Not overly clever, but it worked. It allowed me to update [1] without changing or knowing [0] or [2]. I think this is what Ameysoft was suggesting, I just didn't get it.
match (a) where a.display = false set a.dElement= [a.dElemenet[0],'Octagon',a.dElement[2]] return count(a)
That allowed me to update just one element in the list. Not as elegant as dElement[1] = 'Octagon' but close
Thanks
All the sessions of the conference are now available online