gpt4 book ai didi

neo4j - 如何从neo4j中的2种不同关系获取出发时间和到达时间

转载 作者:行者123 更新时间:2023-12-03 03:05:16 24 4
gpt4 key购买 nike

模型是运输系统:

节点:BusStop、Bus、TransportOperator

关系:巴士-[Operated_By]->TransportOperator

关系:BusStop-[:Stops_At]->巴士

关系 STOPS_AT 有 2 个属性,到达时间 (9:00) 和出发时间 (9:01) 连接到所有公交车站。

示例:34 号总线连接到 BusStop1(ArrTime-9:00, DeptTime-9:01)、BusStop2(ArrTime-9:10, DeptTime-9:11)、BusStop3(ArrTime-9:15, DeptTime) -9:16)

如果我使用下面的查询,我得到的输出为:

enter code here

MATCH (a:BusStop{name:'Bonhoefferstrasse'}),(d:BusStop {name:'HeidelBerg Hauptbanhof'})
MATCH p = allShortestPaths((a)-[:STOPS_AT*]-(d))
WITH p, FILTER(x IN NODES(p) WHERE x:Bus) AS buses
UNWIND buses AS Bus
MATCH (Bus)-[:OPERATED_BY]->(o:TransportOperator)
RETURN EXTRACT(x IN NODES(p) | CASE WHEN x:BusStop THEN 'BusStop' + x.name
WHEN x:Bus THEN 'Bus' + x.id
ELSE '' END) AS itinerary,
COLLECT ('Bus' + Bus.id+ ':' + 'TransportOperator' + o.name) AS Operators

输出:

行程:BusStopBonhoefferstrasse、Bus34、BusStopHeidelBerg Hauptbanhof

运营商:公交车 34 路:TransportOperatorRhein-Neckar-Verkehr

预期输出:

行程:BusStopBonhoefferstrasse 出发时间:9:01、Bus34、RNV、BusStopHeidelBerg Hauptbanhof 到达时间:9:15

运营商:公交车 34 路:TransportOperatorRhein-Neckar-Verkehr

最佳答案

我们再来一次:

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}),

(o1:Operator {id:1}),
(o2:Operator {id:2}),

(b1)-[:OPERATED_BY]->(o1),
(b2)-[:OPERATED_BY]->(o1),
(b3)-[:OPERATED_BY]->(o2),

(b1)-[:STOPS_AT {arrival:'9:00', departure:'9:01'}]->(a),
(b1)-[:STOPS_AT {arrival:'9:10', departure:'9:11'}]->(b),
(b2)-[:STOPS_AT {arrival:'9:05', departure:'9:06'}]->(a),
(b2)-[:STOPS_AT {arrival:'9:20', departure:'9:21'}]->(b),
(b2)-[:STOPS_AT {arrival:'9:29', departure:'9:30'}]->(c),
(b3)-[:STOPS_AT {arrival:'9:45', departure:'9:46'}]->(b),
(b3)-[:STOPS_AT {arrival:'9:50', departure:'9:51'}]->(c),
(b3)-[:STOPS_AT {arrival:'9:57', departure:'9:58'}]->(d);

您应该将出发和到达时间作为单独的列返回:

MATCH (a:Stop {name:'A'}), (d:Stop {name:'D'})
MATCH p = allShortestPaths((a)-[:STOPS_AT*]-(d))
WITH p, FILTER(x IN NODES(p) WHERE x:Bus) AS buses
UNWIND buses AS bus
MATCH (bus)-[:OPERATED_BY]->(o:Operator)
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,
HEAD(RELATIONSHIPS(p)).departure AS departure_time,
LAST(RELATIONSHIPS(p)).arrival AS arrival_time,
COLLECT('Bus ' + bus.id + ':' + 'Operator ' + o.id) AS operators

http://console.neo4j.org/r/x8fx3b

关于neo4j - 如何从neo4j中的2种不同关系获取出发时间和到达时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28225817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com