2013-04-25 90 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。)