Neo4j:层次结构查找密码查询

Neo4j:层次结构查找密码查询,neo4j,cypher,Neo4j,Cypher,我试图为下面的域模型找到层次结构(向上和向下)。作为neo4j的新手,我在使用cypher查询获得正确的层次结构方面遇到了一些困难 任何帮助或样品都会对我有很大帮助 (:Person{id=1})-[HAS_CHILD]->(:Person{id=2})-[HAS_CHILD]->(:Person{id=3})-[HAS_CHILD]->(:Person{id=4})-[HAS_CHILD]->(:Person{id=5}) …就像这样,一个人可以有多个孩子 我试图建立

我试图为下面的域模型找到层次结构(向上和向下)。作为neo4j的新手,我在使用cypher查询获得正确的层次结构方面遇到了一些困难

任何帮助或样品都会对我有很大帮助

(:Person{id=1})-[HAS_CHILD]->(:Person{id=2})-[HAS_CHILD]->(:Person{id=3})-[HAS_CHILD]->(:Person{id=4})-[HAS_CHILD]->(:Person{id=5})
…就像这样,一个人可以有多个孩子

我试图建立一些查询来查找

  • 一个人及其所有子女的等级制度

  • 一个人及其父母的等级制度

  • 两人之间的关系-如有

  • 一个人和他所有的孩子都有一定的等级制度


  • 使用由
    (:Person)-[:HAS_CHILD]->(:Person)
    组成的数据模型,这些查询应该返回您正在查找的数据(我们还假设您在每个
    Person
    节点上都有一个唯一的
    名称
    属性,以便于按名称进行查找,但您也可以使用任何唯一的id/属性):

    一个人和他的所有孩子

    我们可以在这里使用可变长度路径模式来匹配包含多个子关系的模式

    MATCH (p:Person)-[:HAS_CHILD*]->(child:Person)
    WHERE p.name = "Bob Loblaw"
    RETURN child;
    
    一个人及其父母阶层

    与上面的查询非常相似,但我们只是颠倒了关系的方向

    MATCH (p:Person)<-[:HAS_CHILD*]-(ancestor:Person)
    WHERE p.name = "Bob Loblaw"
    RETURN ancestor;
    
    一个人及其子女层次结构-达到特定深度

    此查询与前面的“person and all his children query”非常相似,但是我们可以在可变长度路径上指定边界。注意:应始终使用可变长度路径指定上限,以避免长时间运行的查询

    MATCH (p:Person)-[:HAS_CHILD*1..5]->(child:Person)
    WHERE p.name = "Bob Loblaw"
    RETURN child;
    

    使用由
    (:Person)-[:HAS_CHILD]->(:Person)
    组成的数据模型,这些查询应该返回您正在查找的数据(我们还假设您在每个
    Person
    节点上都有一个唯一的
    名称
    属性,以便于按名称进行查找,但您也可以使用任何唯一的id/属性):

    一个人和他的所有孩子

    我们可以在这里使用可变长度路径模式来匹配包含多个子关系的模式

    MATCH (p:Person)-[:HAS_CHILD*]->(child:Person)
    WHERE p.name = "Bob Loblaw"
    RETURN child;
    
    一个人及其父母阶层

    与上面的查询非常相似,但我们只是颠倒了关系的方向

    MATCH (p:Person)<-[:HAS_CHILD*]-(ancestor:Person)
    WHERE p.name = "Bob Loblaw"
    RETURN ancestor;
    
    一个人及其子女层次结构-达到特定深度

    此查询与前面的“person and all his children query”非常相似,但是我们可以在可变长度路径上指定边界。注意:应始终使用可变长度路径指定上限,以避免长时间运行的查询

    MATCH (p:Person)-[:HAS_CHILD*1..5]->(child:Person)
    WHERE p.name = "Bob Loblaw"
    RETURN child;
    
    这些应该是有效的

    其中
    子句用于删除子路径。#4的答案不能使用相同的
    WHERE
    子句,因此结果将包含子路径

    一,

    二,

    四,。使用深度不超过5:

    MATCH p=(:Person{id:1})-[:HAS_CHILD*1..5]->(c)
    RETURN NODES(p);
    
    这些应该是有效的

    其中
    子句用于删除子路径。#4的答案不能使用相同的
    WHERE
    子句,因此结果将包含子路径

    一,

    二,

    四,。使用深度不超过5:

    MATCH p=(:Person{id:1})-[:HAS_CHILD*1..5]->(c)
    RETURN NODES(p);