我有一个树状结构,我试图获得一个Cypher查询,如果父节点没有某种关系,它将用子节点替换父节点
例如查询:MATCH (c)-[:CHILD_OF*]->(p {id:"123"}) return c
返回一个类似的结构(我们不关心其他节点是什么,结构是唯一需要保留的东西)
()<-(A)
()<-()<-(B)<-()<-(C)
()<-(D)<-(E)<-()<-(F)
\-(G)<-()<-H)
如何在没有特定属性的情况下让查询忽略所有节点,但保持相同的结构:
(A)
(B)<-(C)
(D)<-(E)<-(F)
(G)<-(H)
答案 0 :(得分:1)
您应该查看在APOC程序中创建virtual nodes and relationships的程序。
这些将允许您创建虚拟关系,这些关系不会保存到图表中,但会在您的查询中显示和查看。
棘手的部分将是创建这些新的虚拟关系。您可能会过滤掉您感兴趣的节点的所有路径中的节点。此时您可能需要使用apoc.coll.pairsMin()
以便在集合中获取每个相邻的节点对,以便您可以创建它们之间的虚拟关系。
创建所有虚拟关系后(在同一个cypher查询中),使用这些虚拟关系从根节点进行匹配,您应该看到所需的图形。