Neo4j查询忽略不满足条件但保持相同结构的父节点

时间:2017-05-26 00:23:07

标签: neo4j cypher

我有一个树状结构,我试图获得一个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)

1 个答案:

答案 0 :(得分:1)

您应该查看在APOC程序中创建virtual nodes and relationships的程序。

这些将允许您创建虚拟关系,这些关系不会保存到图表中,但会在您的查询中显示和查看。

棘手的部分将是创建这些新的虚拟关系。您可能会过滤掉您感兴趣的节点的所有路径中的节点。此时您可能需要使用apoc.coll.pairsMin()以便在集合中获取每个相邻的节点对,以便您可以创建它们之间的虚拟关系。

创建所有虚拟关系后(在同一个cypher查询中),使用这些虚拟关系从根节点进行匹配,您应该看到所需的图形。