我正在研究信息学,目前正在从事一个项目。我必须选择一种NOSQL数据结构并自己研究。我选择了Graph数据库,并做了一个小项目来展示自己的技能。我必须基于关系数据库在Neo4J中建立一个数据库。
该项目着重于您可以使用并放回安特卫普市不同站点的自行车。大多数大城市都有的东西。我的数据库中有3种类型的节点。首先,有游乐设施。游乐设施由rideId,startTime,endtime,startLockId和endLockId组成。然后是可以放自行车的车站。每次骑行都有一个开始锁和一个结束锁。因此,这些节点之间也有两种关系。一辆车离开的地方,另一辆到达的地方。车站由lockId,街道和号码(门牌号码)组成。每个站都位于安特卫普的某个地区。地区仅由一个名称组成。数据库中共有7个区。
我必须写一些查询来展示我在Neo4J上的技能,但是我找不到。问题问:“哪个区之间的游乐设施最多?”。
当前,我来到此查询,其中列出了所有游乐设施的起点和终点:
MATCH (d1:District)<--(s1:Station)<--(r:Ride)-->(s2:Station)-->(d2:District)
WHERE d1.Name <> d2.Name
RETURN d1, d2
我一直在搜索Internet,并且一直在尝试使用COUNT(),ORDER BY()和COLLECT()方法,但是似乎找不到解决方案,或者离它更近。有谁知道我如何计算区域之间最常见的关系?
答案 0 :(得分:0)
您的查询看起来差不多了,您正在寻找的模式是正确的。
您将需要一个更好的谓词,以确保您不会获得镜像结果(相同的区对的结果,只需切换将哪个绑定到d1以及将哪个绑定到d2)。您可以通过对地区的图形ID添加限制:WHERE id(d1) < id(d2)
来做到这一点。这也将避免返回相同区域的路径。
您需要使用count()
作为乘车次数,然后对结果进行排序,然后获得您感兴趣的许多结果。
MATCH (d1:District)<--(:Station)<--(r:Ride)-->(:Station)-->(d2:District)
WHERE id(d1) < id(d2)
RETURN d1, d2, count(r) as rideCount
ORDER BY rideCount DESC
LIMIT 5