我刚刚开始使用Neo4j所以我怀疑我在这里缺少一些非常基本的东西。鉴于我有以下图表。
从突出显示的节点(ID 7937)开始,我需要获取所有连接的节点,但没有任何通过任何“关闭”节点。
使用此
match (n:TestNode)-[:LINK*]-(m)
where ID(n) = 7937
return *
当然,由于没有过滤器,我会怀疑我所怀疑的一切。
我需要最终结果:
这似乎给了我需要的结果。这是正确的方法还是更好的方法:
match p=n-[:LINK*..]-m
where ID(n) = 7937 and all(x in nodes(p) WHERE x.status = 'on')
return p;
答案 0 :(得分:1)
您的查询未向您提供您想要的结果。也就是说,它不包括结果中最近的off
个节点。
这是一个包含最近的off
个节点的查询。但是,结果将包含部分路径和完整路径;这是因为您的数据与LINK
关系没有一致的方向性,因此很难确定何时到达路径的末尾(可能会完成,但会使查询更复杂)。
MATCH p=n-[:LINK*..]-m
WHERE ID(n) = 7937
RETURN DISTINCT REDUCE(s =[n], x IN NODES(p)[1..] |
CASE (s[-1]).status
WHEN 'on' THEN s + x
ELSE s
END) AS res;
以下是显示示例结果的a console。