首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用cypher,如何在DB中获得较少的传输路径?

使用cypher,如何在DB中获得较少的传输路径?
EN

Stack Overflow用户
提问于 2015-12-04 02:45:31
回答 1查看 50关注 0票数 0

我用neo4j创建了一个总线路线数据库,您可以在这里下载它,https://www.dropbox.com/s/zamkyh2aaw3voe6/data.rar?dl=0

我想得到更少的转移路径,我做的是:

代码语言:javascript
运行
复制
MATCH path=allShortestPaths((start:潍坊_STATION {name:'寒亭一村'})-[rels*..50]->(end:潍坊_STATION {name:'火车站'}))
         RETURN NODES(path) AS stations,relationships(path) AS path,
         length(FILTER(index IN RANGE(1, length(rels)-1) WHERE (rels[index]).bus <> (rels[index - 1]).bus)) AS transfer_count
         ORDER BY transfer_count
         LIMIT 10

但结果不对,谁能帮我?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-04 18:18:41

这是否给了你你想要的:

代码语言:javascript
运行
复制
MATCH path=allShortestPaths((start:潍坊_STATION {name:'寒亭一村'})-[rels*..50]->(end:潍坊_STATION {name:'火车站'}))
     RETURN NODES(path) AS stations,relationships(path) AS route,
     length(path) AS transfer_count
     ORDER BY transfer_count ASC
     LIMIT 10

这应该返回按路径长度排列的连接两个站点的10条路径。不过,这里的订单是不需要的。由于我们使用的是allShortestPaths函数,所以找到的所有路径都将是相同的长度(对于您共享的数据,22)。

你在问题中提到了传输时间,但我不认为时间是你的数据中的一个属性。如果存储了时间,则可以使用reduce函数对旅行时间和顺序进行求和。

编辑

使用extract函数从路径中的关系收集总线名称:

代码语言:javascript
运行
复制
MATCH 
    path=allShortestPaths((start:潍坊_STATION {name:'寒亭一村'})-[rels*..50]->(end:潍坊_STATION {name:'火车站'}))
RETURN 
    NODES(path) AS stations, relationships(path) AS route,
    length(path) AS transfer_count, extract(x in rels | x.bus) AS buses
    ORDER BY transfer_count ASC
    LIMIT 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34080069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档