我是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]
提前致谢!
答案 0 :(得分:1)
OrientDB有集合和地图类型。要使集合成为结果集(您感兴趣的内容),您必须将其展平:
select flatten( shortestpath(" + firstVertex + ", " + secondVertex + ") )
要获得边缘传出边缘,有很多方法。下面几个:
select vertices.out from (
select flatten( shortestpath(" + firstVertex + ", " + secondVertex + ") ) as vertices
)
或者:
select flatten( shortestpath(" + firstVertex + ", " + secondVertex + ").out )
答案 1 :(得分: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)
答案 2 :(得分:0)
尝试
select expand(shortestPath) from (select shortestPath(" + firstVertex + ", " + secondVertex + "))
您将收到顶点。