我有一个总线服务的以下数据结构。城市节点有许多到其他城市节点的公交车,这些公交车再次有许多公交车到其他城市节点。
公交车和城市由他们的身份识别。
(适用一个:城市) - [R:为了] - GT;(B:市) - > [R:向] - GT;(C:市) - [R:向] - GT; (d:市)
Node City具有以下属性:cityId(int) relationship to prop:busId(int),arrivalTime(int)。
问题:
给出一个cityId和一个busId如何编写一个密码查询来获取总线的路径,即所有城市从开始到目的地按到达时间排序。
上面提供的cityId确保公共汽车从该城市开始。
我的猜测
匹配(a:城市) - [r:To *] - >(b:City)其中a.cityId = cityid和r.busId = busId返回r,b。按r.arrivalTime排序
答案 0 :(得分:0)
我认为这会给你你想要的东西(需要Neo4j 2.0.1或更高版本)。
MATCH (c:City)-[legs:TO*]->(terminus)
WHERE c.cityId = { cityId }
AND ALL (leg IN legs WHERE leg.busId = { busId })
AND NOT (terminus)-[:TO {busId: { busId }}]->()
RETURN [leg IN legs |
{city: endNode(leg).cityId, arrival: leg.arrivalTime}]
AS stops
这里要注意三件事。
endnode()
函数提取有关它所在城市的信息。