我在Neo4j中有以下数据:
CREATE (t1:T {start:1, end:8})
CREATE (t2:T {start:1, end:4})
CREATE (t3:T {start:1, end:2})
CREATE (t4:T {start:3, end:4})
CREATE (t5:T {start:5, end:6})
CREATE (t6:T {start:7, end:8})
CREATE (t2)-[r1:T_OF]->(t1)
CREATE (t3)-[r2:T_OF]->(t2)
CREATE (t4)-[r3:T_OF]->(t2)
CREATE (t5)-[r4:T_OF]->(t1)
CREATE (t6)-[r5:T_OF]->(t1)
这会创建一个包含起始值和结束值的树,在我的实际应用中,这是一个纪元日期。我希望能够找到在给定范围内没有附加较短/较小节点的节点。
MATCH (t:T)
WHERE t.start >= 1 AND t.end <= 6
(MAGIC)
RETURN t
我的目标是仅返回t2
和t5
,即使t3
和t4
属于该范围。由于它们与T_OF
的关系t2
,因此应忽略它们。
我尝试了几种不同的方式,但不幸的是我无法想出这一点。
请告诉我是否应该更好地解释。
答案 0 :(得分:1)
这对你有用吗?
它收集具有正确日期范围的所有T
个节点,然后过滤掉与集合中任何节点具有T_OF
关系的所有节点。
MATCH (t:T)
WHERE t.start >= 1 AND t.end <= 6
WITH COLLECT(t) AS ct
RETURN FILTER(x IN ct
WHERE ALL (y IN ct
WHERE NOT ((x)-[:T_OF]->(y))))
AS result;
答案 1 :(得分:0)
您可以将路径用作表达式,也可以否定它们。
MATCH (t:T)
WHERE t.start >= 1 AND t.end <= 6
AND NOT (t)<-[:T_OF]-()
RETURN t