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

Neo4j Cypher查询包含特定节点和关系的所有路径

  •  0
  • LizzAlice  · 技术社区  · 1 年前

    我需要一个密码查询,它将匹配包含指定节点和指定边的特定长度n的所有路径。我开发了一个查询,但我遇到了一个语法错误,我不知道为什么,因为我是密码新手

    MATCH (a, b)
    WITH a, b
    MATCH path = (a)-[*..n]-(b)
    WHERE ALL(relName IN ['relname1', 'relname2'] 
       WHERE ANY(rel IN relationships(path) WHERE rel.display_name = relName)
    AND a.name = 'node1name' and b.name = 'node2name'
    RETURN path
    

    语法错误为

    Invalid input 'a': expected "(", "ALL", "ANY" or "SHORTEST" (line 1, column 8 (offset: 7))
    "MATCH (a, b)"
            ^
    
    0 回复  |  直到 1 年前
        1
  •  1
  •   Finbar Good    1 年前

    这个 ( ) 在你的第一个 MATCH 可以被解释为单个节点模式。但在每个节点模式中最多可以声明一个变量,因此 (a, b) 引发语法错误。

    无论如何,看起来你并不真的需要前两行。这是一个有效的查询(如果 n 替换为正整数),绑定到名称为的起始节点 'node1name' 和具有名称的结束节点 'node2name' :

    MATCH path = (a)-[*..n]-(b)
    WHERE all(relName IN ['relname1', 'relname2'] 
                WHERE any(rel IN relationships(path) WHERE rel.display_name = relName)) 
    AND a.name = 'node1name' and b.name = 'node2name'
    RETURN path