通过消除与某个节点的关系来接收连接节点的子集

Receive subset of connected nodes by eliminating relationship with certain node

最近几天我试图在 Neo4j 中弄清楚一些东西,但我仍然没有成功。情况:

你看到一个蓝色节点(数据库里有很多,但是这个有一个特定的ID),蓝色节点连接橙色节点,橙色节点连接绿色节点。绿色节点进一步连接到其他橙色节点。

现在如果我能得到所有没有直接连接到蓝色节点(用方块标记)的橙色节点应该是非常好的。

我可以从每个绿色节点获取所有橙色节点,但我只想要不连接到蓝色的节点(我还希望节点在另一个收集或其他方法中直接连接到蓝色,但这不是问题实现)。

我尝试了不同的方法,举一个我尝试过的事情的例子:

MATCH (b:BLUE{BLUE_ID:'234234'})-[a:relation_type_1]->(node_with_connection_to_blue)<-[c:relation_type_2]-(g:GREEN)-[d:relation_type_2]->(node_with_no_connection_to_blue)<-[e:relation_type_1]-(b:BLUE)
WHERE NOT (node_with_no_connection_to_blue)<-[a:relation_type_1]-(b:BLUE{BLUE_ID:'234234'})

如有任何帮助,我将不胜感激!提前致谢!

此致

有多种方法可以解决这个问题。假设一个蓝色节点没有直接连接到大量橙色节点,我首先建立一个包含蓝色所有直接邻居的集合,然后在第二步中遍历到 2 度的橙色节点。那些需要被 WHERE:

中的直接邻居过滤
MATCH (b:BLUE{BLUE_ID:'234234'})-[:relation_type_1]->(o)
WITH b, collect(o) as directNeighbors
MATCH (b)-[:relation_type_1]->()<-[:relation_type_2]-()-[:relation_type_2]->(orange)
WHERE NOT orange in directNeighbors
RETURN distinct orange