如何在Cypher的EXISTS()中使用WHERE

时间:2018-10-22 10:03:07

标签: neo4j cypher

我试图在两个节点之间的图中查找所有路径,但条件是该路径中的任何节点都必须连接到另一个标签为TIMESWITCH且有效的endDate和startDate的节点。

TIMESWITCH节点的目的是表明所连接的节点只能在特定时间范围内使用。

所以我用了这个Cypher查询:

MATCH  p=(:MYNODE {myid:'node1'}) -[*]- (:MYNODE {myid:'node2'}) 
WHERE  ALL(n in nodes(p) WHERE EXISTS(
           (n)<--(ts:TIMESWITCH) 
           WHERE ts.startDate < datetime("2018-10-01T00:00:00") <= ts.endDate ))
RETURN p

但是此查询不正确,因为EXISTS内禁止使用WHERE子句。这仅表示存在之内,一个人可以测试相等性,但不能测试不平等性。

所以我不知道该怎么办...我应该怎么写那个存在的东西?

1 个答案:

答案 0 :(得分:1)

您应该能够使用模式理解作为解决方法,因为模式理解允许您为理解引入新的变量,并使用WHERE子句进行过滤。您只需要检查理解的大小即可确保它不为空。

MATCH  p=(:MYNODE {myid:'node1'}) -[*]- (:MYNODE {myid:'node2'}) 
WHERE  ALL(n in nodes(p) WHERE size([(n)<--(ts:TIMESWITCH) 
   WHERE ts.startDate < datetime("2018-10-01T00:00:00") <= ts.endDate | ts]) > 0)
RETURN p