Reputation: 7580
I am using neo4j 3.2.x. What I am try to do is write a query that will update relation between two nodes (User and Gender) and return single User node with InterestedInGender property pulled from relation as array. There is a problem with the below query as right now it returns multiple records with single value for interestedInGender. Relations are created properly but when returning data it is returning multiple records. I just want to return User node. Is there any way we can fix this query to just return single user node.
MATCH (u:User {_id:"1234"})
MATCH (ig:Gender) WHERE ig.value IN ["male", "female"]
WITH u, ig
OPTIONAL MATCH (u)-[igr:INTERESTED_IN_GENDER]->()
DELETE igr
with u, ig
MERGE (u)-[:INTERESTED_IN_GENDER]->(ig)
RETURN u{
._id,
interestedInGender: [(u)-[:INTERESTED_IN_GENDER]->(ig:Gender) | ig.value]
}
Upvotes: 1
Views: 926
Reputation: 30397
The reason you're getting multiple records (rows) is because your ig
match to gender matches to two :Gender nodes...two rows where both rows have the same u
node, but different ig
nodes. That cardinality remains throughout the rest of your query, and so you get two rows back.
You need to shrink the cardinality of u
back down to 1 after you MERGE the relationship, so add this after your MERGE but before your RETURN:
WITH distinct u
Upvotes: 0