首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Cypher中遍历关系的可变次数

在Cypher中遍历关系的可变次数
EN

Stack Overflow用户
提问于 2022-02-27 21:09:25
回答 2查看 72关注 0票数 1

我有一张机场图,它们之间的航线,以及运载它的航空公司。我将路由创建为单独的节点,而不仅仅是一个关系,这样我就可以将每个节点与航空公司和其他节点连接起来。

每个Route节点与源机场具有IS_FROM关系,与目的地具有IS_TO关系。该公司还与其航空公司建立了IS_BY关系:

我试图穿越这棵树,n时代,在两个机场之间的路线。例如,如果是n = 3,我希望获得从LAXLHR的所有路由,有3个或更少的连接。

因此,基本上,我的结果将是以下几个方面的联合:没有连接机场:

代码语言:javascript
复制
MATCH (a1:Airport {iata : 'LAX'})<-[:IS_FROM]-(r:Route)-[:IS_TO]->(a2:Airport {iata : 'LHR'}), (r)-[:IS_BY]->(ai:Airline) return a1 , r , a2 , ai;

1个连接机场:

代码语言:javascript
复制
MATCH (a1:Airport {iata : 'LAX'})<-[:IS_FROM]-(r:Route)-[:IS_TO]->(a2:Airport)<-[IS_FROM]-(r2:Route)-[:IS_TO]->(a3:Airport {iata: 'LHR'}), (r2)-[:IS_BY]->(ai:Airline) return a1 , r , a2 , a3 , r2 , ai;

诸若此类。

因此,查询应该动态遍历(:Airport)<-[:IS_FROM]-(:Route)-[:IS_TO]->(:Airport)模式n次,并返回节点(我更感兴趣的是返回连接到这些路由的Airlines。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-01 03:52:03

您可以首先提取距机场3或3以下的所有路径,然后使用OPTIONAL MATCH查看路径中的哪个节点是路线,以及哪个航空公司提供这些路径。

代码语言:javascript
复制
MATCH path = (:Airport {iata:$start_airport})-[*2..6]-(:Airport {iata:$end_airport})
WITH path,nodes(path) as path_airports_and_connecting_routes
UNWIND path_airports_and_connecting_routes as node
OPTIONAL MATCH (node)-[:IS_BY]-(airline:Airline)
WITH collect(node) as airports_and_routes,airline
RETURN airports_and_routes + [airline]

注意:可变长度路径不允许传递参数,因此不能执行类似[*2..2*n]的操作。

票数 0
EN

Stack Overflow用户

发布于 2022-02-28 10:13:21

我不知道我是否把你的问题说对了。对我来说,你的问题可以这样解决:

代码语言:javascript
复制
MATCH (a1:Airport {iata : 'LAX'})<-[r1:IS_FROM]-(r:Route)-[r2:IS_TO]->(a2:Airport{iata : 'LHR'})
OPTIONAL MATCH (r)-[r3:IS_BY]->(ai:Airline)
RETURN a1,r1,r,r2,a2,r3,ai
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71288479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档