我有查询路径的查询:
MATCH p =(o:Order)-[r:seeks*2..8]->(o:Order)
WHERE o.Name="000089"
AND ALL(x IN tail(nodes(p))
WHERE SINGLE(y IN tail(nodes(p))
WHERE x=y))
RETURN extract(n IN nodes(p)| n.Name) AS OrderID, length(p)
ORDER BY length(p)
我的输出是:
OrderID长度(p)
所以,我还想要在每条路径上返回第二个节点,如(上面用粗体标记的节点):
答案 0 :(得分:1)
我创建了一个用于实验的简单数据集:
CREATE
(o1:Order {Name: '0089'})-[:seeks]->
(o2:Order {Name: '0090'})-[:seeks]->
(o3:Order {Name: '0091'})-[:seeks]->(o1)
这是一个(o1)->(o2)->(o3)->(o1)
圈。
使用nodes
函数提取路径上的节点并将列表索引到第二个节点。 Cypher中的列表从零开始编号。
MATCH p=(o:Order {Name: '0089'})-[r:seeks*2..8]->(o:Order)
RETURN nodes(p)[1]
或者,您可以在不使用路径变量并获取第一个关系的endNode
的情况下执行此操作(请注意,这仅适用于定向关系):
MATCH (o:Order {Name: '0089'})-[r:seeks*2..8]->(o:Order)
RETURN endNode(r[0])