查找与集合中所有节点相关的节点

时间:2013-09-27 11:53:29

标签: neo4j cypher

我有一个节点,关系,节点,关系,...集合的路径。 我想找到与此路径中的所有节点有关的节点/节点。

有人可以在Cypher中提供示例查询吗?

现在我有

START startNode=node(3), endNode=node(5)
MATCH path=startNode-[:CONNECT*]->endNode
WITH path, relationships(path) AS connections, nodes(path) AS nodes

问题是我不知道如何使用节点集合来查找与此集合中的所有节点有关的节点/节点。键入关系:CONTAINS,它从节点集合中的搜索节点到节点。集合中的所有节点都必须与搜索节点有关。

1 个答案:

答案 0 :(得分:1)

这是应该将具有关系[:CONTAINS]的节点集合返回到具有指定起点和终点的路径上的节点“midNode”的查询。它按路径对所需的“searchingNode”进行分组。

START startNode=node(3), endNode=node(5)
Match path=startNode-[:Connect*]->midNode-[:Connect*]->endNode, searchedNode-[:CONTAINS]->midNode
Return distinct path, collect(searchedNode) as searchedNodes

更新:需要注意的是,标识符“midNode”表示两个指定的起始节点和结束节点之间路径上的每个节点,因为可变长度关系[:Connect *]将其连接到起点和终点。具体地说,它表示距离起始节点一步的节点('m1'),如本例中的startNode - [:Connect] - > m1 - [:Connect] - > ...-> endNode;和'm2'距离起始节点两步,如本例所示startNode - [:Connect] - () - [:Connect] - > m2 - [:Connect] - > ...-> endNode 。事实上,匹配的路径将是路径的集合,每个路径对应于startNode和endNode之间的一个节点。由于我们只需要路径上所有中间节点的一个路径,因此DISTINCT用于删除重复路径,而searchNode将按路径键进行分组,因此searchingNode的集合将是集合与startNode和endNode之间的路径上的所有节点相关的所有节点的数据。