【问题标题】:Cypher query to 'expand' around a path of nodes密码查询以围绕节点路径“扩展”
【发布时间】:2014-02-26 11:42:09
【问题描述】:

我有两个按预期运行的密码查询。我的图表仅由通过关系连接的企业组成。

# Finding the shortest path that exists between two given business nodes
START a=node:Businesses('id: xxx'), b=node:Businesses('id: yyy')
MATCH a, b, p= shortestPath((a)-[*..15]-(b))
RETURN p

# Find all nodes connected 1-step out from a given business node
START a=node:Businesses('id: xxx')
MATCH (a)-[r:isRelated*]->(d)
RETURN distinct d,r

我现在想将这两个查询的各个方面合并为一个。我想找到任何两个给定节点之间的最短路径,并从返回的路径中的节点走出 1 步。我尝试了下面的查询,它不起作用,因为 p 正在返回一个路径,而我的第二个匹配语句需要一个节点。

START a=node:Businesses('id: xxx'), b=node:Businesses('id: yyy')
MATCH a, b, p= allShortestPaths((a)-[*..15]-(b))
WITH p
MATCH (p)-[r:isRelated*1]->(d)
RETURN distinct p,d,r

我应该如何编写这种类型的查询?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    这个怎么样:

    START a=node:Businesses('id: xxx'), b=node:Businesses('id: yyy')
    MATCH shortest=shortestPath((a)-[*..15]-(b)) 
    WITH extract(n in nodes(shortest) | id(n)) as ids
    MATCH pp=(x)-->(y)
    WHERE id(x) in ids
    RETURN pp
    

    从最短路径收集所有节点 ID,然后在第二部分进行过滤。我猜这个查询效率不是很高,但可以完成这项工作。

    【讨论】:

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