2016-01-13 114 views
1

我有PERSON图,PERSON可以FRIEND s的PERSON并能OWNOBJECT例如:的Neo4j避免循环图重复

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 

但是,如果“一”想“车”我得到的“C”两次,因为我可以有两种方式到达那里:

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

我该如何确保只能得到“c”一次?

回答

2

就在DISTINCT改性剂添加到您的return语句:

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

或者你可能'RETURN P,COUNT(*)'给多少路径有一个迹象,这可能表明一个实力 –

+0

而你可以嵌入ID检查;-) ... MATCH(me:PERSON {id:{userId}})...' –