2013-04-25 281 views
5

我是OrientDB的新手,我想使用新的shortestPath()方法获取两个顶点之间的边。在OrientDB的最短路径中获取边缘()

我要做的就是:

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]

在此先感谢!

回答

1

OrientDB具有集合和地图类型。为了使集合的结果集(你感兴趣)您对压平:

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

为了让边缘输出边沿有这么多的方法。以下几个:

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

或者也:

select flatten(shortestpath(" + firstVertex + ", " + secondVertex + ").out) 
+0

我仍然不能得到边缘/秒。我现在得到'[#-2:0 v0]' – 2013-04-25 21:50:13

+0

难道是因为使用'db.query(sql)'?有了它,我只能得到一个ArrayList而不是一个Map。如果是这样,我还可以使用什么来在Java中执行sql查询? – 2013-04-25 22:07:22

+0

你必须跨越边缘。有几种方法。我改变我的答案来支持它 – Lvca 2013-04-26 12:20:31

0

尝试

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

,您会收到顶点。

+0

我的问题是关于边缘,而不是顶点。 – 2014-02-23 18:12:49

1

对于我来说,它没有工作,但丁或Lvca如何解释它:

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

这导致在控制台或没有记录中的错误OrientDB工作室返回。

相反,当我使用函数结果的别名时,它终于起作用了。因此,也许尝试这种形式:

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

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