귀하의 모델은 더 많은 그래픽이 필요합니다. 즉, 버스 정보가있는 중지 노드 간의 관계에 배열 속성이 있어야한다고 생각하지 않습니다. 오히려, 버스는 정지 지점을 나타내는 관계가있는 노드 자체 여야합니다.
CREATE (a:Stop {name:'A'}),
(b:Stop {name:'B'}),
(c:Stop {name:'C'}),
(d:Stop {name:'D'}),
(a)-[:NEXT {distance:1}]->(b),
(b)-[:NEXT {distance:2}]->(c),
(c)-[:NEXT {distance:3}]->(d),
(b1:Bus {id:1}),
(b2:Bus {id:2}),
(b3:Bus {id:3}),
(b1)-[:STOPS_AT]->(a),
(b1)-[:STOPS_AT]->(b),
(b2)-[:STOPS_AT]->(a),
(b2)-[:STOPS_AT]->(b),
(b2)-[:STOPS_AT]->(c),
(b3)-[:STOPS_AT]->(b),
(b3)-[:STOPS_AT]->(c),
(b3)-[:STOPS_AT]->(d);
그래프는 이제 다음과 같습니다 : 다음 예제 데이터 생각해이 모델
를, 그것은 이전의 수를 최소화하는 일정을 쉽게 찾을 수 있고 모두를 반환 해당되는 경우 필요한 이전 정보. 예를 들어, D A에서 (이전의 #의 측면에서 짧은) 모든 짧은 여행 일정 : 모든 하나의 전송이
MATCH (a:Stop {name:'A'}), (d:Stop {name:'D'})
MATCH p = allShortestPaths((a)-[:STOPS_AT*]-(d))
RETURN EXTRACT(x IN NODES(p) | CASE WHEN x:Stop THEN 'Stop ' + x.name
WHEN x:Bus THEN 'Bus ' + x.id
ELSE '' END) AS itinerary
이
세 가지 경로가 발견되었다 : 물론
Stop A, Bus 2, Stop C, Bus 3, Stop D
Stop A, Bus 1, Stop B, Bus 3, Stop D
Stop A, Bus 2, Stop B, Bus 3, Stop D
, 당신은 할 수 있습니다 EXTRACT()
기능으로 원하는 정보를 반환하십시오.
또 다른 예입니다. C에에서 일정을 찾기 :
MATCH (a:Stop {name:'A'}), (c:Stop {name:'C'})
MATCH p = allShortestPaths((a)-[:STOPS_AT*]-(c))
RETURN EXTRACT(x IN NODES(p) | CASE WHEN x:Stop THEN 'Stop ' + x.name
WHEN x:Bus THEN 'Bus ' + x.id
ELSE '' END)
한 경로가 발견, 어떤 전송이없는되었다
Stop A, Bus 2, Stop C
이 귀하의 질문에 답을 알려 주시기 바랍니다.
편집 :
MATCH (a:Stop {name:'A'}), (d:Stop {name:'D'})
MATCH route = allShortestPaths((a)-[:STOPS_AT*]-(d)),
stops = (a)-[:NEXT*]->(d)
RETURN EXTRACT(x IN NODES(route) | CASE WHEN x:Stop THEN 'Stop ' + x.name
WHEN x:Bus THEN 'Bus ' + x.id
ELSE '' END) AS itinerary,
REDUCE(d = 0, x IN RELATIONSHIPS(stops) | d + x.distance) AS distance
itinerary distance
Stop A, Bus 1, Stop B, Bus 3, Stop D 6
Stop A, Bus 2, Stop B, Bus 3, Stop D 6
Stop A, Bus 2, Stop C, Bus 3, Stop D 6
당신이 거리 나 전송의 수를 최소화 하시겠습니까 : 거리를 얻으려면? –
각 경로의 총 dstancce와 함께 버스 교환 정보와 함께 가능한 모든 경로를 가져오고 싶습니다. –