我创建了一个通过 :CONNECTION 类型会话连接的车站节点的传输路由,如果是传输,我有一个 :EXCHANGE 会话类型。 我正在使用查询寻找路线
MATCH path = (from:Station {id: 61})-[:IN]->(sec_from:Section), (to:Station {id: 131})<-[:OUT]-(sec_to:Section), route=(sec_from)-[:CONNECTION|EXCHANGE*]->(sec_to) RETURN route;
如果我只想搜索直接连接,我使用:
route=(sec_from)-[:CONNECTION*]->(sec_to)
,它有效,如果我想将连接数限制为5-10,我使用:
route=(sec_from)-[:CONNECTION*5..10]->(sec_to)
也有效,但如果我想要一个类型为 :CONNECTION 1-100 的连接,同时键入 :EXCHANGE 0-3?
查询不起作用:
MATCH path = (from:Station {id: 61})-[:IN]->(sec_from:Section), (to:Station {id: 131})<-[:OUT]-(sec_to:Section), route=(sec_from)-[:CONNECTION*1..100|EXCHANGE*0..3]->(sec_to) RETURN route;
正确的语法是什么?
谢谢
根据您在问题中所写的内容,最简单的方法是在
WHERE
子句中添加对每种关系类型的数量的约束:
MATCH path = (from:Station {id: 61})-[:IN]->(sec_from:Section),
(to:Station {id: 131})<-[:OUT]-(sec_to:Section),
route = (sec_from)-[r:CONNECTION|EXCHANGE*1..103]->(sec_to)
WHERE 1 <= size([rel IN r WHERE rel:CONNECTION]) <= 100
AND size([rel IN r WHERE rel.EXCHANGE]) <= 3
RETURN route;
像这样的后置过滤器不会非常有效,因为它可以获取许多具有> 3个
EXCHANGE
类型关系的路径,然后在WHERE
子句阶段丢弃它们。