我试图递归执行具有2个特定关系的备用匹配语句。例如,宠物由人拥有。宠物喜欢其他人(不是主人)这些人拥有他们拥有的宠物,喜欢其他人等。
match (n.Person {id.123})<-[r.OwnedBy]-(p.Pet) Return n, r, p
match (p.Pet {id.123})-[r.Likes]->(n.Person) Return p, r, n
注意所涉及的方向关系 - #1是向后的,#2是向前的。
我想做的是给一个人(id),1。显示宠物[OwnedBy]这个人(id)2。显示那些宠物[喜欢]的人3.显示宠物[OwnedBy] 2中的人递归地
独立地,这些Match语句有效。他们没有在一起。我尝试添加第二个匹配语句,使用不同的变量,然后它将下降2级并停止。
在真实数据集中,有许多节点和关系。我试图将显示限制为只有这2个关系/节点的“树”视图。
谢谢!
这个怎么样?
match (n:Person {id:123})<-[:OwnedBy]-(p:Pet)-[:Likes]->(n2:Person)<-[:OwnedBy]-(p2:Pet)
return n, collect(distinct p) as pets, collect(distinct n2) as peopleLiked, collect(distinct p2) as petsOfPeopleLiked
虽然如果你只对图形显示感兴趣,这应该有效:
match path = (n:Person {id:123})<-[:OwnedBy]-(p:Pet)-[:Likes]->(n2:Person)<-[:OwnedBy]-(p2:Pet)
return path, n, p, n2, p2
你也可以使用APOC Procedures。这可以仅使用以下两种类型的关系来处理这些路径:
match (n:Person {id:123})
call apoc.path.expandConfig(n, {relationshipFilter:'<OwnedBy|Likes>'}) yield path
return path