1

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

有人可以在 Cypher 中给出示例查询吗?

现在我有

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

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

4

1 回答 1

1

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

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 删除重复路径,

于 2013-09-27T12:24:04.480 回答