代码之家  ›  专栏  ›  技术社区  ›  Vivek

在neo4j中使用模式获取所有节点及其关系路径的最新方法是什么

  •  0
  • Vivek  · 技术社区  · 6 年前

    我正在neo4j中执行以下查询,它返回所有节点及其关系路径

    查询

    MATCH (p:MyNode {name : "Vivek"})-[r*1..2]->(f:MyNode) return p,[x in r | type(x)] as rel,f
    

    结果

    {vivek} ["knows"] {Rajesh}
    {vivek} ["knows","friendof] {Ezhil}
    

    当这个查询正确执行并给出预期结果时,我在neo4j浏览器中收到了以下警告

    以可变长度模式绑定到列表的关系是 已弃用。(将可变长度关系模式绑定到 变量('r')已弃用,将来将不受支持 版本。推荐的方法是将整个路径绑定到一个变量, 然后提取关系:MATCH p=(…)-[…]-(…)WITH*, 关系(p)AS r)

    为了升级我的查询,我尝试了各种方法,但都无济于事。正在寻求这方面的帮助。

    这是我按照帮助中的建议尝试过的匹配组合

    MATCH p1 = (p:MyNode {name : "Vivek"})-[r*1..2]-(f:MyNode) WITH *, relationships(p1) AS r return p1
    

    结果

    不支持具有相同名称的多个结果列(第1行, 列60(偏移量:59))“匹配p1=(p:MyNode{名称: “Vivek”})-[r*1..2]-(f:MyNode)WITH*,关系(p1)作为r返回 p1“

    更新

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   Vivek    6 年前
    MATCH p1 = (p:MyNode {name : "Vivek"})-[r*1..2]-(f:MyNode) 
    WITH *, relationships(p1) AS r return p1
    

    当您在第二行中执行*时,您将获取第一个列表中生成的所有列,它们是p1、p、r、f。这就是为什么你不能再次将关系(p1)别名为r。 获取查询-1中的结果。你可以这样做-

    MATCH path=(p:MyNode {name : "Vivek"})-[r*1..2]->(f:MyNode) 
    return p,[x in relationships(path) | type(x)] as rel,f