Neo4j Cypher-节点遍历
我有一个简单的图,其中节点标记为组织,有两种定向关系类型“控制”和“影响”。我的目标是- 第一步 给定一个节点,查找与之连接的所有具有“控制”关系的节点(在任何方向) 步骤2 对于步骤1找到的所有节点,查找任何出站“影响”关系(任意长度),并包括这些节点 到目前为止,我能想到的是:Neo4j Cypher-节点遍历,neo4j,cypher,Neo4j,Cypher,我有一个简单的图,其中节点标记为组织,有两种定向关系类型“控制”和“影响”。我的目标是- 第一步 给定一个节点,查找与之连接的所有具有“控制”关系的节点(在任何方向) 步骤2 对于步骤1找到的所有节点,查找任何出站“影响”关系(任意长度),并包括这些节点 到目前为止,我能想到的是: MATCH (x:Organization {ORGID: "5621"})-[:Control*1..]-(y) WITH y MATCH y-[:Influence*0..]-(z) RETURN y,z; 问
MATCH (x:Organization {ORGID: "5621"})-[:Control*1..]-(y) WITH y MATCH y-[:Influence*0..]-(z) RETURN y,z;
问题1) 此查询不包括起始节点,如何在结果中获得该节点 2) 理想情况下,我也希望得到结果中的关系,它只返回节点
TIA这里有一种方法可以满足您的需求:
MATCH (x:Organization { ORGID: "5621" }), p1 = x-[:Influence*0..]->(z)
WHERE NOT z-[:Influence]->()
WITH x, COLLECT(p1) AS c1
OPTIONAL MATCH x-[:Control*]-(y), p2=y-[:Influence*0..]->(z)
WHERE NOT z-[:Influence]->()
RETURN c1 + COLLECT(p2) AS result;
查询返回匹配的
影响路径的集合。WHERE
子句用于确保每个路径尽可能长(以避免在结果中显示大量重复的子路径)。每个路径都是由关系分隔的节点的集合,如果路径没有关系,则可以仅由一个节点组成。非常感谢,给了我想出其他解决方案的想法。。。我非常喜欢MATCH(StartNode:Organization{ORGID:“5621”}),ControlPath=StartNode-[:Control | EC*1..](ControlNode),SIStartNodePath=StartNodePath-[:Influence*0..]->(),SiotherNodePath=ControlNode-[:Influence*0..]->(),返回ControlPath,SIStartNodePath,SiotherNodePath;