1

I have nodes of 5 different labels, say, A, B, C, D, E. I need to match a node of each type based on some property and update some other property of the matched node.

The query works perfectly fine if i execute 5 different match and set queries, one for each label type.

However, when I try to do everything in one single query, the property seems to get updated multiple times. The property I am updating is an array (the same value gets added to the array multiple times). The following is the query I am trying to execute:

match (a:A {a: "abc"}) 
match (A {a: "abc"})-[RELATED_TO*]-(b:B {b:"def"}) 
match (c:C {c: "lmn"}) 
match (d:D {d: "pqr"}) 
match (e:E {e: "xyz"}) 
set a.prop=a.prop+"123" 
set b.prop=b.prop+"123" 
set c.prop=c.prop+"123" 
set d.prop=d.prop+"123" 
set e.prop=e.prop+"123"

The issue is that when I execute the above query the property array prop gets 123 added multiple times. Is it because the results of my match statement are multiple and the same set statements are run that many times. If that is the case, can someone suggest me the best way to do this in a single query.

The reason I want to do this in a single query is because I am sending cypher queries from a remote application using Bolt protocol, and I do not want to send 5 different queries.

[EDIT : Adding a simple example]

Consider the following simple arrangement of all 5 nodes in the DB: enter image description here

When I run the above query on this set up, and assuming the property prop was an empty array before, the following is the property value after running the query:

A.prop = ["123", "123", "123", "123", "123", "123", "123", "123"]  // added 8 times
B.prop = ["123", "123", "123", "123", "123", "123", "123", "123"]  // added 8 times
C.prop = ["123", "123", "123", "123"]  // added 4 times
D.prop = ["123", "123", "123", "123"]  // added 4 times
E.prop = ["123", "123", "123", "123"]  // added 4 times

The desired outcome however should be:

A.prop = ["123"]  // added 1 time
B.prop = ["123"]  // added 1 time
C.prop = ["123"]  // added 1 time
D.prop = ["123"]  // added 1 time
E.prop = ["123"]  // added 1 time

[Edit 2] I found a somewhat similar question here but not a satisfying answer. I believe sending multiple unrelated queries at once from a remote application would be better than sending them one by one (from an application point of view)

Community
  • 1
  • 1
imran arshad
  • 274
  • 1
  • 12
  • "The property array prop gets 123 added multiple times". In all cases or just e.g in A and B entities. Ideally, consider adding a table with the desired outcome and the observed one. – Sevle Jun 30 '16 at 13:01
  • Thanks, just updated my question – imran arshad Jun 30 '16 at 16:51

0 Answers0