从遍历中选择路径并在目标顶点上过滤(OrientDB)

时间:2015-07-27 19:42:25

标签: graph orientdb shortest-path graph-traversal

我是图形数据库和OrientDB的新手,所以感谢您的耐心等待。

我有以下SQL查询为两个顶点之间的最短路径生成一组扩展结果(我正在使用GratefulDeadConcerts数据库):

select expand(sp) from (select shortestPath(#9:2,#9:15,'BOTH') as sp)

无论出于何种原因,使用没有别名的展开都不会产生任何结果,但这不是一个真正的问题。

我想要的不是最短路径,而是潜在路径和分支的集合。

我尝试过使用travesedVertex:

SELECT traversedVertex(-1) FROM ( TRAVERSE out() FROM #9:2 WHILE $depth <= 10 )

但我不知道如何设定目的地,或者(说实话)如何解释我得到的结果。

修改 如果有多种方法可以从A到B,我希望每个路径都返回一个集合,如:

{
   paths: [
      [#9:2, #4:16, #8:7, #9:15],
      [#9:2, #4:2, #16:5, #11:3, #9:15],
      [#9:2, #4:4, #11:6, #9:15]
   ]
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

首先,$ path是当前路径的字符串表示形式。 其次,您可以在外部查询的where子句上过滤目标列。试试这个:

SELECT 
   $path 
FROM 
   ( TRAVERSE 
        out() 
     FROM 
        #9:2 
     WHILE 
        $depth <= 10 ) 
WHERE 
   @rid = #9:15

我得到以下输出: query result

这是你在找什么?

如果我不添加where子句,我会得到这个输出:   query result without where