2013-04-25 3 views
5

私はOrientDBを初めて使用しています。新しいshortestPath()メソッドを使用して、2つの頂点の間にあるエッジを取得します。私は何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つの頂点が直接接続されているので、この場合にも、一つだけエッジ)私はエッジを抽出することができる方法を知りたいと思いました

[#-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

私はまだエッジ/秒を得ることができません(私はv1.7.4を使用しています。)。 '[#-2:0 v0]' –

+0

'db.query(sql)'を使用している可能性がありますか?それを使って私はMapでなくArrayListを得ることができます。これが原因であれば、JavaでSQLクエリを実行するために他に何が使えますか? –

+0

あなたは端を越えました。いくつかの方法があります。私はそれをサポートするために私の答えを変更する – Lvca

0

はあなたが頂点を受け取ることになります

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

を試してみてください。私にとって

+0

私の質問は、頂点ではなくエッジに関するものでした。 –

1

、それはダンテや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) 

関連する問題