Graph Neo4J避免循环图上的重复
我有一个Graph Neo4J避免循环图上的重复,graph,neo4j,cypher,Graph,Neo4j,Cypher,我有一个人的图形,人可以是朋友s和人并且可以拥有对象,例如: 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”,因为我可以通过两种方式
人
的图形,人
可以是朋友
s和人
并且可以拥有
对象,例如:
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”?只需在返回语句中添加修饰符即可:
MATCH (me:PERSON)-[:FRIEND*1..2]-(p:PERSON)-[o:OWN]->(obj:OBJECT)
WHERE me.id = {userId}
RETURN DISTINCT p
或者,您可以
返回p,count(*)
以指示有多少条路径,这可能表示您可以嵌入id检查;-)<代码>匹配(me:PERSON{id:{userId}}).