You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询指定Route节点间所有可行路径及总旅行耗时?

查询Route 'A'到Route 'F'的所有可行路径及总耗时

基础查询(排除循环路径)

要获取从Route 'A'到Route 'F'的所有无循环可行路径及对应的总旅行时间,可使用适配AgensGraph语法的Cypher查询:

SELECT *
FROM cypher('Map', $$
    MATCH p=(start:Route {name: 'A'})-[:Connects*]->(end:Route {name: 'F'})
    WHERE ALL(n IN nodes(p) | single(m IN nodes(p) | m = n))
    WITH p, reduce(totalTime = 0, rel IN relationships(p) | totalTime + rel.time) AS totalTravelTime
    RETURN 
        [node IN nodes(p) | node.name] AS path,
        totalTravelTime
$$) AS (path agtype, totalTravelTime agtype);

关键部分说明

  • MATCH子句:匹配从名称为'A'的Route节点出发,通过任意数量的Connects关系到达名称为'F'的Route节点的完整路径p。
  • WHERE子句:过滤掉包含重复节点的循环路径(比如A→B→D→A→C→F这类重复经过节点的路线),确保每条路径都是无循环的有效路线。
  • WITH子句:用reduce函数遍历路径中的所有Connects关系,累加每个关系的time属性,计算出路径的总旅行耗时totalTravelTime。
  • RETURN子句:将路径中的节点名称提取为字符串列表(方便直观查看路线),同时返回对应的总耗时。

允许循环路径的查询(可选)

如果需要包含可重复经过节点的循环路径,可去掉WHERE条件,但建议添加路径长度限制避免返回无限结果,比如限制最多5步:

SELECT *
FROM cypher('Map', $$
    MATCH p=(start:Route {name: 'A'})-[:Connects*1..5]->(end:Route {name: 'F'})
    WITH p, reduce(totalTime = 0, rel IN relationships(p) | totalTime + rel.time) AS totalTravelTime
    RETURN 
        [node IN nodes(p) | node.name] AS path,
        totalTravelTime
$$) AS (path agtype, totalTravelTime agtype);

内容的提问来源于stack exchange,提问作者Ken W.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:17:41