6

我是 OrientDB 的新手,我想使用新的 shortestPath() 方法来获取两个顶点之间的边。

我要做的是:

OSQLSynchQuery<T> sql = new OSQLSynchQuery<T>("select shortestpath(" + firstVertex + ", " + secondVertex + ").asString()");

List<ODocument> execute = db.query(sql);

而我只能得到的是[#-2:1{shortestpath:[#8:1, #8:3]} v0]

所以,我想知道如何从这个输出或我没有得到的输出中提取边缘(好吧,在这种情况下只有一个边缘,因为这两个顶点是直接连接的)asString()

[#-2:1{shortestpath:[2]} v0]
4

3 回答 3

1

对我来说,dante 或 Lvca 解释它的方式不起作用:

select flatten(shortestPath) from (select shortestPath(#12:0,#12:2,'BOTH')

这会导致控制台出错或 OrientDB Studio 中没有返回记录。

相反,当我为函数结果使用别名时,它终于起作用了。所以也许试试这个表格:

select flatten(sp) from (select shortestPath(#12:0,#15:2,'BOTH') as sp)

(注意。我使用的是 v1.7.4)

于 2014-06-28T12:45:43.180 回答
1

OrientDB 有集合和地图类型。要使集合成为结果集(您感兴趣的内容),您必须将其展平:

select flatten( shortestpath(" + firstVertex + ", " + secondVertex + ") )

要获得边缘输出边缘,有很多方法。下面是其中的一些:

select vertices.out from (
   select flatten( shortestpath(" + firstVertex + ", " + secondVertex + ") ) as vertices
)

或者还有:

select flatten( shortestpath(" + firstVertex + ", " + secondVertex + ").out )
于 2013-04-25T21:39:09.863 回答
0

尝试

select expand(shortestPath) from (select shortestPath(" + firstVertex + ", " + secondVertex + "))

您将收到顶点。

于 2014-02-21T15:53:22.587 回答