我是Neo4j的新手,我正在尝试构建一个小型示例应用程序:公共交通规划师。它看起来如下(显然是强烈简化的例子):
每辆公共汽车(出行)的出发和到达时间存储为关系属性。我希望公共汽车在指定时间附近(或之后)离开,同时在出发后尽快到达(即不一定是最短但最快的路线)。
我在Cypher中进行了很多实验,但我无法做到这一点。有什么建议吗?
编辑:更新图
答案 0 :(得分:2)
要启用更简单的Cypher查询,您可以将图形模型更改为:
(:Trip)-[:LEG {start: 10, end: 20}]->(:Stop)-[:LEG {start: 30, end: 40}]->(:Stop) ...
| |
[:AT] [:AT]
| |
v v
(Location {name: "Paris"}) (Location {name: "London"})
总而言之,每次旅行都包含一系列N腿和N圈。每个Stop都与一个Location相关,每个Leg都存储它的开始和结束时间。
使用上述模型,将返回以下查询:(a)在时间40或之后开始的最快旅程的路径,以及(b)该旅程的持续时间。
MATCH p=(t:Trip)-[legs:LEG*1..]->(s:Stop)-[:AT]->(loc:Location)
WHERE HEAD(legs).start >= 40 AND NOT (s)-[:LEG]->()
WITH p, LAST(legs).end - HEAD(legs).start AS duration
RETURN p, duration ORDER BY duration LIMIT 1;
Here is a console显示示例结果。