【问题标题】:Cypher - traversal of nodesCypher - 节点的遍历
【发布时间】:2015-07-29 10:50:17
【问题描述】:

我有一个简单的图表,其中包含标记为组织的节点和两个有向关系类型“控制”和“影响”。我的目标是-

第 1 步 给定一个节点,找到所有与它有“控制”关系的节点(在任何方向上)

第 2 步 对于步骤 1 找到的所有节点,找到任何出站“影响”关系(任意长度)并包括这些节点

到目前为止我能想到的:

MATCH (x:Organization {ORGID: "5621"})-[:Control*1..]-(y) WITH y MATCH y-[:Influence*0..]-(z) RETURN y,z;

问题
1)这个查询不包括起始节点,我怎样才能在结果中得到它?

2) 理想情况下,我也想获得结果中的关系,它只返回节点

TIA

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    这是做你想做的事情的一种方法:

    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;
    

    查询返回匹配Influence 路径的集合。 WHERE 子句用于确保每个路径尽可能长(以避免在结果中出现大量重复的子路径)。每条路径都是由关系分隔的节点的集合,如果路径没有关系,则可以仅包含一个节点。

    【讨论】:

    • 非常感谢 v,也给了我提出其他解决方案的想法......我非常喜欢 MATCH (StartNode:Organization { ORGID: "5621" }), ControlPath = StartNode-[: Control|EC*1..]-(ControlNode), SIStartNodePath = StartNode-[:Influence*0..]->(), SIOtherNodesPath = ControlNode-[:Influence*0..]->() RETURN ControlPath, SIStartNodePath , SIOtherNodesPath;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多