Neo4j 如何返回与一组节点相关但彼此不相关的节点

Neo4j 如何返回与一组节点相关但彼此不相关的节点,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我试图在neo4j浏览器中显示网络 我有一个图,其中节点是Person,有两种类型的关系MANAGED和FRIENDS 给定一个id为'123'的初始人员,我可以找到他们递归管理的所有人员,如下所示 MATCH (p:Person { person_id:"123" })-[r:MANAGES *0..100]->(managed:Person) RETURN managed,r 我现在想做的是显示所有这些人和所有托管箭头,但除此之外,显示所有与托管人和朋友箭头有朋友关系的人。但是,即使

我试图在neo4j浏览器中显示网络

我有一个图,其中节点是
Person
,有两种类型的关系
MANAGED
FRIENDS

给定一个id为
'123'
的初始人员,我可以找到他们递归管理的所有人员,如下所示

MATCH (p:Person { person_id:"123" })-[r:MANAGES *0..100]->(managed:Person)
RETURN managed,r
我现在想做的是显示所有这些人和所有托管箭头,但除此之外,显示所有与
托管
人和
朋友
箭头有
朋友关系的人。但是,即使存在
朋友
关系,我也不想向
管理
中的其他人显示
朋友
箭头

某些非功能性伪代码可能是

MATCH (p:Person { person_id:"123" })-[m:MANAGES *0..100]->(managed:Person)-[f:FRIENDS]-(friend:Person)
RETURN managed,m, f if friend not in managed, friend if friend not in managed

您需要使用COLLECT将结果压缩到列表中,以便对其运行筛选器。()


您可以使用“展开”和一些筛选器将行取回,但这将需要一些额外的工作,并使返回的数据更大(例如,p将被返回行数)。

您需要使用“收集”将结果压缩到列表中,以便对其运行筛选器。()

您可以使用带有一些过滤器的“展开”来取回行,但这将需要一些额外的工作,并使返回的数据更大(例如,p将被返回行数)

MATCH (p:Person { person_id:"123" })-[m:MANAGES *0..100]->(managed:Person)-[f:FRIENDS]-(friend:Person)
// m is already a list because *..100, so need to unpack it to consolidate repeated values
UNWIND m as ms 
WITH COLLECT(DISTINCT p) as p, COLLECT(DISTINCT ms) as m, COLLECT(DISTINCT managed) as managed, COLLECT(DISTINCT f) as f, COLLECT(DISTINCT friend) as friend
RETURN managed, m, FILTER(r in f WHERE NOT r in m) as f, FILTER(n in friend WHERE NOT n in managed) as friend