【问题标题】:neo4j cypher query find all children excluding specific pathneo4j 密码查询查找除特定路径之外的所有子项
【发布时间】:2019-11-26 22:16:30
【问题描述】:

对于这样的示例图

Graph Sample

如果我们知道某个特定账户下的其中一个子节点的起点,我们怎么能不分方向地遍历所有相关节点到达客户节点,而不是向下遍历到另一个账户,所以基本上总是停在客户(在 Neo4j 中使用 Cypher)

我目前有一个这样的查询,但是我不知道在到达客户节点后如何让它停止,但仍然继续遍历下面任何节点的链接

MATCH (p:Customer{key:'Customer:1011'})-[*8]-(connected) RETURN distinct(connected.key)

基本上,我想要一个通用查询,它可以采用任何标签/键来唯一标识客户节点下方的起始节点,并遍历所有子节点,不包括通往其他帐户的路径

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    欢迎来到 StackOverflow!是的,您可以通过指定路径中最后一个节点必须具有的标签来做到这一点 - 让我们来看看它。

    首先,让我们创建示例图 - 我发明了一些看似合理的关系名称:

    MERGE (cus1: Customer { id: 1 })
    MERGE (acc1: Account { id: 1 })
    MERGE (acc2: Account { id: 2 })
    MERGE (con1: Contract { id: 1 })
    MERGE (con2: Contract { id: 2 })
    MERGE (bui1: Building { id: 1 })
    MERGE (bui2: Building { id: 2 })
    MERGE (sp1: ServicePoint { id: 1 })
    MERGE (sp2: ServicePoint { id: 2 })
    MERGE (b1: Bill { id: 1 })
    MERGE (b2: Bill { id: 2 })
    MERGE (b3: Bill { id: 3 })
    MERGE (b4: Bill { id: 4 })
    MERGE (cus1)-[:HOLDS]->(acc1)
    MERGE (cus1)-[:HOLDS]->(acc2)
    MERGE (acc1)-[:CONTAINS]->(con1)
    MERGE (acc2)-[:CONTAINS]->(con2)
    MERGE (bui1)-[:COVERED_BY]->(con1)
    MERGE (bui2)-[:COVERED_BY]->(con2)
    MERGE (sp1)-[:BELONGS_TO]->(con1)
    MERGE (sp2)-[:BELONGS_TO]->(con2)
    MERGE (b1)-[:RELATES_TO]->(sp1)
    MERGE (b2)-[:RELATES_TO]->(sp1)
    MERGE (b3)-[:RELATES_TO]->(sp2)
    MERGE (b4)-[:RELATES_TO]->(sp2)
    

    现在假设我们从法案开始 - 法案 2:

    MATCH path=(b: Bill { id: 2 })-[*]-(c: Customer)
    RETURN path
    

    我们要求提供从 Bill 2 开始并以任何 Customer 节点结束的任意长度的所有路径。 Neo 不会返回包含 Account 1 的分支,因为它不是 Bill 2 和 Customer 1 之间任何路径的一部分。但是,出于同样的原因,我们也没有返回 Bill 1,即使它连接到我们最终的帐户在。

    如果您想要匹配帐户的整个子图,您可以分两步完成 - 依次返回客户和帐户,然后返回连接到该帐户的所有节点:

    MATCH (b: Bill { id: 2 })-[*]-(a: Account)-[]-(c: Customer)
    MATCH path=(c)-[]->(a)-[*]-()
    RETURN path
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多