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

我试图穿越这棵树,n时代,在两个机场之间的路线。例如,如果是n = 3,我希望获得从LAX到LHR的所有路由,有3个或更少的连接。
因此,基本上,我的结果将是以下几个方面的联合:没有连接机场:
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个连接机场:
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。
发布于 2022-03-01 03:52:03
您可以首先提取距机场3或3以下的所有路径,然后使用OPTIONAL MATCH查看路径中的哪个节点是路线,以及哪个航空公司提供这些路径。
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]的操作。
发布于 2022-02-28 10:13:21
我不知道我是否把你的问题说对了。对我来说,你的问题可以这样解决:
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,aihttps://stackoverflow.com/questions/71288479
复制相似问题