2016-10-22 9 views
1

最近、ArangoDBはエッジをグラフの他のエッジに接続できることを読んでいます。このような状況では、パスのクエリはどのように機能しますか?例えばこの場合ArangoDB:エッジが他のエッジに接続されているトラバーサル

car <-------- part 
     ^
     | 
     | 
installationEvidence 

installationEvidence車の部分との間のエッジに接続するノードです。カーノードから、installationEvidenceを返しますが、partを返すAQLは何ですか? p.vertices[1]層ではinstallationEvidencepartの両方が考慮されていますか?

答えて

3

In ArangoDBエッジは、特殊なタイプのドキュメントです。 そのため、他のエッジを指すエッジを保存することができます。 クエリの観点から、このエッジには2つの方向があります。 A)トラバーサルはtarget edgeになります。この場合、一般的なタイプのドキュメントであるとみなされ、トラバーサルはtarget edgeのいずれの方向にも従いません。 これは、ステートメントにトラバーサルステップを2つ記述する必要があることを意味します。 エッジの最初の終了。 エッジの_fromまたは_toで始まる2番目の。 あなたのケースでは、クエリは次のようになり:

FOR edge IN 1 OUTBOUND @installationEvidece @@edges1 
    LET car = DOCUMENT(edge._to) 
    RETURN car 

B)トラバーサルは、それを指して他のエッジを有し、エッジを介して歩きます。 このケースはもっと複雑です。 ArangoDBのアーキテクチャでは、「頂点」はそれが付属しているエッジについて何も知らず、エッジは頂点を知っています。私たちが作るために、お客様の任意のユースケースに遭遇しませんでした当分のために

FOR part,edge IN 1 INBOUND @car @@edges1 
    FOR installationEvidence IN 1 INBOUND edge @@edges2 
    [...] 

:あなたはこのケースで何ができるか は再び2つの横断縁と第二開始に遭遇文、例えばを書くことですトラバーサルよりも透明です。これが重要な場合はお問い合わせください。これらの種類のクエリを簡単に作成できるように優先順位を上げることができます。

+0

わかりましたが、私はエッジが別のエッジを指すことはできませんが、理にかなっています。エッジコレクションは '_to'と' _from'なので、有効な '_id'を指すことができます。 –

+0

素晴らしい情報をありがとう!これは、 'p.edges [1]'と 'p.vertices [1]'構文を使って 'for v、e、p in 1..2'を単に適用しないことを意味しますか?これは私のチームの潜在的なユースケースですが、私たちは近い将来にそれを組み込むことは考えにくいでしょう。私たちは、クエリ構造を簡素化し、いくつかの関連するデータに少し直接直接アクセスする方法として、これを調べています。 –

+0

すでに使用している構文(私が好むもの)を再利用できるか、それとも非常に混乱しているのかを判断するために、どの構文を使用するのかはまだ決まっていません。ここでのことは、 'car'から' installationEvidence'に移動すれば 'p'はどのように見えるのでしょうか? {vertices:[car、installationEvidence]、edges:[car < - part、* < - evidence]} 'この場合、頂点とエッジの間の実際の関係を特定することはかなり困難です。私たちはこれをお手伝いし、私たちのニーズに合ったソリューションを見つけられることを嬉しく思っています。 – mchacki

関連する問題