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

Neo4j 如何在Cypher中使用EXISTS()中的WHERE,neo4j,cypher,Neo4j,Cypher,我试图在两个节点之间的图中查找所有路径,条件是此路径中的任何节点都必须连接到另一个具有标签TIMESWITCH和有效endDate和startDate的节点 时间开关节点的用途是指示所连接的节点只能在特定时间范围内使用 所以我使用了这个密码查询: MATCH p=(:MYNODE {myid:'node1'}) -[*]- (:MYNODE {myid:'node2'}) WHERE ALL(n in nodes(p) WHERE EXISTS( (n)<--(

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

时间开关节点的用途是指示所连接的节点只能在特定时间范围内使用

所以我使用了这个密码查询:

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
MATCH p=(:MYNODE{myid:'node1'})-[*]-(:MYNODE{myid:'node2'})
其中存在的节点(p)中的所有(n)(

(n) 您应该能够使用模式理解作为解决方法,因为模式理解允许您为理解引入新变量,并使用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
MATCH p=(:MYNODE{myid:'node1'})-[*]-(:MYNODE{myid:'node2'})

在节点(p)中的所有(n)在节点(p)中的大小([(n)感谢它工作得很好!我不知道模式理解,但它很难理解。很高兴能提供帮助!下面是示例。