neo4j - 如何根据关系类型将路径拆分为子路径?
问题描述
我有以下图表:
(:Stop)<-[:IS_LOCATED_AT]-(:Stoptime)-[:IS_PART_OF]->(:Trip),
(:Stop)<-[:IS_LOCATED_AT]-(:Stoptime)-[:IS_PART_OF]->(:Trip)
(:Stop)-[:TRANSFER]->(:Stop)
(st1:Stoptime)-[:CONNECTION]->(st2:Stoptime)
:Stop
有财产stop_id
。
:Trip
有性质startValidDate
, endValidDate
, tripExceptions
. 旅行仅在某些工作日有效。这些日子表示为属性,例如:monday: true, sunday: false
. 每个行程有两个停止时间(出发和到达)。
:Stoptime
可以具有以下属性:如果停止时间是出发事件(如st1
),则:Stoptime
具有属性depatureTine
,否则 st :Stoptime
optime 具有属性arrivalTime
。
每个:Stoptime
都有st_id
。
[:CONNECTION]
并[:TRANSFER]
拥有财产duration
。
在以下查询中,我尝试查找两者之间的路径:Stop
:
MATCH (o:Stop)<-[:IS_LOCATED_AT]-(sto:Stoptime)-[:IS_PART_OF]->(tro:Trip)
WHERE o.stop_id=1000001
AND tro.startValidDate<"2019-04-25"
AND tro.endValidDate>"2019-04-25"
AND NOT "2019-04-25" IN tro.tripExceptions
AND tro.thursday=true
WITH sto, o
MATCH (d:Stop)<-[:IS_LOCATED_AT]-(std:Stoptime)-[:IS_PART_OF]->(trd:Trip)
WHERE d.stop_id=1000004
AND trd.startValidDate<"2019-04-25"
AND trd.endValidDate>"2019-04-25"
WITH sto, std, o
MATCH p=((sto)-[*]-(std))
WHERE NOT o IN nodes(p)
AND NONE (y in relationships(p) WHERE type(y)="IS_PART_OF")
RETURN p
这个查询效果很好。但是我必须检查路径包含关系的情况[:TRANSFER]
,如果下一次旅行在到达日有效。
例如,我有查询后的路径:
path=((sta1:Stoptime)-[c:CONNECTION]->(sta2:Stoptime)-[:IS_LOCATED_AT]->(s1:Stop)-[t:TRANSFER]->(s2:Stop)<-[:IS_LOCATED_AT]-(std3:Stoptime)-[:CONNECTION]->(sta2:Stoptime))
和:
(sta1:Stoptime)-[:IS_PART_OF]->(a:Trip)
(sta2:Stoptime)-[:IS_PART_OF]->(a:Trip)
(stb1:Stoptime)-[:IS_PART_OF]->(b:Trip)
(stb2:Stoptime)-[:IS_PART_OF]->(b:Trip)
该路线于周四开始。我必须检查:
if (x in relationships(path) WHERE type(z)="TRANSFER"):
if (the sum of duration of all connections between previous stoptimes + duration of transfer > 24) AND (b.friday=true): return path
else if (b.thursday=true): return path
else return null
我不知道,我怎么能用 Cypher 写这个。还是在业务层中抛出所有路径并检查这种情况会更好?
我想,也许在传输之间将路径分成子路径会更好?
解决方案
推荐阅读
- javascript - 如何在没有变音符号转换的情况下读取类型为 email 的输入字段的原始值?
- flutter - 升级 Flutter 2.0.6:ProcessException:进程异常退出:致命:错误读取节标题“确认”命令:git fetch --tags
- c# - 保存 4 个鼠标位置
- java - 如何用spring boot编写查询dsl?
- php - Laravel:跟踪访问者信息
- android - compose 编译器如何在后台使用活动生命周期状态?
- go - 在字符串搜索中处理 Unicode
- c++ - 有人可以告诉我这对于登录和注册系统是否足够有效?
- flutter - 为什么 Hero Widget 在 Flutter 中不起作用?
- php - http POST 到 /session 引发的 curl 错误