【问题标题】:Cypher query to match one perticular path of a graph密码查询以匹配图的一个特定路径
【发布时间】:2014-09-02 10:27:29
【问题描述】:

我有一个如下图。紫色节点(11376 和 11394)是我的根节点,即我的图表从那里开始。

现在我想编写一个密码查询,这样我应该得到节点 11376 的完整路径,即从开始节点到结束节点(紫色到黄色)。另外,当我说节点 11376 时,我不应该得到其他节点 11394。我该怎么做。

我尝试了以下查询,但没有得到所需的输出:

 match (hh{id:'11376'})-[*0..2]-(n) return n;

它也给其他节点,即 11394

下面是neo4j grapg:

因此,如果我为节点 11376 编写密码匹配查询,我应该得到完整的以下路径,如下所示。

我该怎么做?

谢谢

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    通过使用黄色节点的标签类型,将查询编写为:

    match path = (hh{id:'11376'})-[*0..3]-(n:YELLOW_NODE_LABEL_TYPE_HERE)
    return path;
    

    这将返回从 (node {id:'11376'}) 到具有您已分配给黄色节点的标签类型的任何节点的所有经过 3 跳或更少的路径。通过第二个紫色节点的路径不会包含在您的结果中,因为通过两个紫色节点到达另一个黄色节点需要超过三跳。

    【讨论】:

    • @Kelvin,非常感谢。您的建议确实对我帮助很大,并且能够看到预期的结果。
    【解决方案2】:

    您知道至少有 3 个跃点,因此您可以在查询中指定它:

    MATCH p=(hh {id:11376})-[r*3]-(n)) RETURN p
    

    顺便说一句,如果没有黄色节点的标签,您不能限制路径必须以黄色节点结尾,因此通过上述查询,您可能会有一些额外的路径

    【讨论】:

    • 我对不同的层级节点有不同的标签名称。我还尝试了您建议的查询,即Match m= (hh {id:11376})-[r*3]-(prop) return m, but it's giving other root node as well. But if i specify the particular property name in the last node as below , it's giving only that path excluding the other values. The query is match p = (hh{id:11376})--()--()--(prop{pname:11392}) return p;`。但我想要根节点 11376 的所有节点和关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多