情况:具有多个端点的图形,每个端点都与主图形有一个连接。在连接主图之前,该连接可以遍历几个插入的节点 - >关系 - >节点。每个连接的最终节点都有一个特定的属性。
我有一个查询沿着这条路走下去,找到最终加入主图的节点。我有另一个查询返回端点节点列表。如何使用查询2中的节点列表输入查询1,这样我就可以获得查询2的每个成员的查询1的结果?
理想情况下,我想要 FOREACH 之类的东西,但是因为查询1以匹配语句开头。它没有做任何改变。类似于create outer_list -> each outer_list_member -> run next query and return single result -> repeat with next list_member
match p=(n {individual end node property})-[r: JOINS*1..5]-(m { joining node property }) return n.name, length(p) as len, m.name order by len limit 1
match node_list = (n {property of all end nodes})
如果我手动指定给定端节点的唯一属性(“id”),我可以运行查询1 并获得正确的结果。我想创建一个包含所有终端节点及其连接节点的列表。
答案 0 :(得分:2)
Cypher的WITH
子句对于将一个查询提供给另一个查询非常有用。也许那会有用吗?
答案 1 :(得分:0)
最短路径每个只返回一条路径。
match (n:Label {prop:value})
match p=shortestPath( (n)-[: JOINS*1..5]-(m:Label2 {prop2:value2})
return n.name, length(p) as len, m.name
否则你也可以使用路径作为集合表达式并返回
head((n1)-[*..5]-(n2))
昂贵的操作,但您可以按路径长度进行操作,然后按起始节点聚合并获取collect的第一个元素(最短路径是列表中的第一个)。
...
with n, p
order by length(p)
return n.name, head(collect(p))