【问题标题】:How to get all parent nodes of a particular node based on ID如何根据ID获取特定节点的所有父节点
【发布时间】:2020-03-13 07:03:20
【问题描述】:

我想获取所有第 3 级节点(下图中的 4、5、6 和 7)及其关系及其父节点详细信息 在下面的例子中:

  • 如果我发送ID : 7,那么我应该得到3 和`1的节点信息
  • 如果我发送ID : 4,那么我应该得到2 和`1的节点信息

如何获取父节点详细信息?请帮忙

编辑: 我正在尝试查询以获取节点、边和直接父级详细信息。我得到的节点和边缘,但是与父节点一起,我得到了很大的节点列表。不知道为什么

Match (n)-[r]-() OPTIONAL MATCH (parent:ParentNodeType)<--(child) return n,r,COLLECT(parent) as parent

【问题讨论】:

  • 你能显示你正在尝试的确切查询吗?你有父、子两个不同的节点,它们的关系名称是什么?

标签: neo4j cypher


【解决方案1】:

这是一个典型的路径查询。如果将它链接到子节点和根节点,则只需检索一个路径。下面我假设您将myid 作为参数传递,并且您已经使用:HAS_CHILD 关系链接了节点

// the path pattern
MATCH path=(root)-[:HAS_CHILD*]->(child)  
// limiting the search
WHERE NOT ()-[:HAS_CHILD]->(root)
      AND child.ID = $myid

//returning the results
RETURN path

or 

// return the IDs, except the last one, because it is the node you started from
UNWIND nodes(path)[..-1] AS node
RETURN node.ID AS parent

【讨论】:

    【解决方案2】:

    所以如果你想获取父节点的所有节点然后使用下面的查询

    Match (n)-[r]-() OPTIONAL MATCH (parent:ParentNodeType)<-[r1*]-(child)  return n,r,COLLECT(parent) as parent
    

    正如您在评论中提到的,您正在寻找 3 级父级,因此您也可以提供任何您想要的级别编号。具体级别请看下面的查询

    Match (n)-[r]-() OPTIONAL MATCH (parent:ParentNodeType)<-[r1*3]-(child)  return n,r,COLLECT(parent) as parent
    

    据我了解,您不需要编写这个长查询。如果您得到所需的结果,请检查以下查询

    MATCH (p)<-[r*3]-(c)  return p,r,c
    

    【讨论】:

    • 我已经更新了这个问题,希望现在有意义
    • 我认为这应该可行。你试过这个查询你用这个查询得到什么结果?
    • 如果您看到我更新的问题,我没有传递任何 id。我想获取所有 3 级节点及其关系及其父节点详细信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多