通过消除与某个节点的关系来接收连接节点的子集
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
最近几天我试图在 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