【问题标题】:query for all paths with a set of specified relationships in neo4j在 neo4j 中查询具有一组指定关系的所有路径
【发布时间】:2014-09-19 20:36:27
【问题描述】:

我正在尝试查询一个图表以返回具有一组指定关系的所有路径。

我拥有的图表包含以下节点:人

连接两个人的关系是:认识、结婚

所以一些数据的例子是:

c:Person-[:knows]->b:Person
  a:Person-[:married]->c:Person
  d:Person-[knows]-> a:Person

在我的查询中,我希望能够找到包含“知道”和“已婚”关系的所有路径;但是,我不关心这些关系在路径中的顺序。例如,我的查询应该返回以下路径:

1) a:Person-[:married]->c:Person-[:knows]->b:Person
2) d:Person-[:knows]->a:Person-[:married]->c:Person

我尝试了以下查询

MATCH p=(a)-[:KNOWS|MARRIED*1..3]-(b)
  RETURN p

但是,它返回只有知道关系的路径或只有已婚关系的路径,但不能同时返回两者。

有什么方法可以找到我想要的路径吗?非常感谢!

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    你可以试试这个

    MATCH p=(a)-[rel*]-(b)
    WHERE type(rel)='KNOWS' OR type(rel)='MARRIED'
    RETURN p
    

    它将为您提供所有路径

    【讨论】:

    • 非常感谢您的回答。我尝试了查询,它抛出了一个错误:r 未定义(第 2 行,第 7 列)。
    • 再次感谢您提供更新的答案。我试过了,它仍然抛出同样的错误:rel 未定义。但是,我发现以下查询可以工作: match (a)-[r*] -(b) where filter(x IN r where type(x)='KNOWS') AND filter(y IN r where type(y) ='已婚') 返回 r
    【解决方案2】:
    MATCH p = (a:Person)-[rels:KNOWS|MARRIED*]->(b:Person)
    WITH p, EXTRACT(r IN rels | TYPE(r)) AS types
    WHERE 'KNOWS' IN types AND 'MARRIED' IN types
    RETURN p
    

    【讨论】:

    • 谢谢你,妮可。我试了查询,没有返回任何行。
    • 猜猜那个模式不存在,那么。 :P
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2017-01-20
    • 2018-08-25
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多