【问题标题】:what is the difference between one node connected to other after three nodes and 2nd degree?一个节点在三个节点和第二级之后连接到另一个节点有什么区别?
【发布时间】:2015-05-07 10:49:17
【问题描述】:

我正在运行查询以查找节点 a 是否直接或间接连接到节点 b。因为我可以直接使用

MATCH (n)-[r]->(a)MATCH (n)-[r]->(b)

当我使用查询时

MATCH (b)-[r*1..2]->(a)

结果不同。我很困惑,无法理解下面提到的两个查询之间的区别。

1-OPTIONAL MATCH L=a-->c-->e-->b with a,b,L,p,q,n

2-OPTIONAL MATCH M=(a)-[r*1..2]->(b)

这两个查询是否相同。如果它们是,那么在我的情况下两者的结果是不同的。 我想看到的是,a 在两跳距离后连接到b。 我将非常感谢您的贡献。提前致谢

【问题讨论】:

    标签: neo4j cypher graph-databases


    【解决方案1】:

    这个查询:

    MATCH (b)-[r*1..2]->(a)
    

    表示匹配一到两跳。因此结果与您的第一个查询不同,因为您的第一个查询完全匹配一跳。这一步走得更远,所以结果是不同的。在这里,“跃点”是指关系而不是节点。

    这个查询:

    OPTIONAL MATCH L=a-->c-->e-->b with a,b,L,p,q,n
    

    非常不同,因为您正在通过 3 个中间关系(a->c、c->e、e->b)浏览 2 个中间节点(c 和 e)。

    顺便说一句,你当然可以在这里使用可选匹配,但对你来说它不是必需的。如果 a 和 b 必须连接,那么在这里使用可选匹配并不会真正改变任何东西。

    因此,您需要决定是想要 2 跳/关系之外的东西,还是想要 2 跳/节点之外的东西,这是不同的。

    另一种写出 2 跳/关系的方式是这样的:

    MATCH p=(a)-[r1]-(m)-[r2]-(b)
    RETURN p
    

    【讨论】:

    • 感谢Frobber,所以这通常意味着距离两跳或距离一个中间节点是同一件事。对吗?
    • “跳”是一种关系(对我来说),所以我将“两跳”解释为“2 个关系”,这与一个中间节点相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 2013-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多