gpt4 book ai didi

neo4j - Cypher:如何匹配路径中的关系节点关系

转载 作者:行者123 更新时间:2023-12-01 02:04:46 25 4
gpt4 key购买 nike

我是 Cypher 和 Neo4j(以及 Stack Overflow)的新手,所以希望这个问题有一个简单的答案。我花了几个小时阅读文档和谷歌搜索,但没有找到任何可以回答这个问题的确切答案。

显然我需要更多的声誉来发布图片,所以我会尽力处理文字。

我可以找到从一个节点到另一个节点的路径,如下所示:

    MATCH path = (a {name:"a"})-[*]-(x {name:"x"})
RETURN extract(r IN nodes(path) | r);

这可能会返回类似于以下两条路径的内容:
    (a)-[:RED]->(b)<-[:BLUE]-(c)-[:RED]->(f)<-[:RED]-(g)-[:BLUE]->(h)<-[:RED]-(x)

(z)-[:RED]->(h)<-[:RED]-(x)

到现在为止还挺好。当然,数据库中还有许多其他关系和节点连接到这些节点,但这是正确的路径。

我需要找到路径上有两个 RED 关系的一个节点,如下所示:
    -[:RED]->(findme)<-[:RED]-

在上面的两个路径示例中,findme = (f) 和 (h)。

注意:数据库中会有很多匹配项,但我只想要路径中的一个(应该只有一个)。此外,路径中可能有许多节点和不同的关系,或者只有 3 个节点,每个节点都由 RED 关系连接。

我尝试使用匹配:
    MATCH (a)-[*]-(b)-[:RED]->(findme)<-[:RED]-(c)-[*]-(x) RETURN findme;

只要有至少 5 个节点就可以工作,但不适用于 3 个节点。

如何在路径中找到此模式匹配?

最佳答案

这个怎么样:

MATCH p=(a {name:"a"})-[*]-(x {name:"x"})
WITH nodes(p) AS nodes
UNWIND nodes AS n
WITH n WHERE exists(()-[:RED]->(n)<-[:RED]-())
RETURN n
  • MATCH在从 a 到 x 的路径上。
  • 获取路径中的所有节点
  • 对于路径中的每个节点,过滤我们有两个传入的节点 RED关系
  • 关于neo4j - Cypher:如何匹配路径中的关系节点关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33447579/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com