Neo4J避免在循环图上重复

时间:2016-01-13 16:17:58

标签: graph neo4j cypher

我有PERSON的图表,PERSON可以是FRIENDPERSONOWN OBJECT例如:

a-FRIEND-b
a-FRIEND-c
b-FRIEND-c
c-OWN-"car"

我想允许有需要的人找到朋友或朋友的朋友拥有这个东西,所以我用:

MATCH (me:PERSON)-[:FRIEND*1..2]-(p:PERSON)-[o:OWN]->(obj:OBJECT)
WHERE me.id = {userId}
RETURN p

但如果“a”想要“汽车”,我会两次得到“c”,因为我可以通过两种方式到达那里:

a-FRIEND-c-OWN-"car"
a-FRIEND-b-FRIEND-c-OWN-"car"

我怎样才能确保我只获得一次“c”?

1 个答案:

答案 0 :(得分:2)

只需将DISTINCT修饰符添加到return语句中:

MATCH (me:PERSON)-[:FRIEND*1..2]-(p:PERSON)-[o:OWN]->(obj:OBJECT) 
WHERE me.id = {userId} 
RETURN DISTINCT p