Neo4J在set属性后排除节点

时间:2015-11-24 11:11:48

标签: neo4j

我刚刚开始使用Neo4j所以我怀疑我在这里缺少一些非常基本的东西。鉴于我有以下图表。

enter image description here

从突出显示的节点(ID 7937)开始,我需要获取所有连接的节点,但没有任何通过任何“关闭”节点。

使用此

match (n:TestNode)-[:LINK*]-(m) 
where ID(n) = 7937
return *

当然,由于没有过滤器,我会怀疑我所怀疑的一切。

我需要最终结果:

enter image description here

这似乎给了我需要的结果。这是正确的方法还是更好的方法:

match p=n-[:LINK*..]-m
   where ID(n) = 7937 and all(x in nodes(p) WHERE x.status = 'on') 
return p;

1 个答案:

答案 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