如何设置节点之间的关系数量?

问题描述 投票:0回答:1

我创建了一个通过 :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;

正确的语法是什么?

谢谢

neo4j
1个回答
0
投票

根据您在问题中所写的内容,最简单的方法是在

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
子句阶段丢弃它们。

© www.soinside.com 2019 - 2024. All rights reserved.