2016-10-14 18 views
1

私はarangodbで非常に新しく、非常に好きですが、私はクエリ文を作成するのに苦労しています。 私は2つのコレクション(VA、VB)とそれらの間のエッジを持っています 特定のフィルタ(_idではなく)でVaを検索し、ECに特定のプロパティを持つRETURNドキュメント(VB) 。アクティブ:true)ArangoDBが接続された頂点を見つける

ドキュメントでは、私は頂点がすでにわかっている例しか見つけませんでした。 ありがとうございます。 Jnl

+0

m内のVAフィルタm.name == 'some name' FOR v、e、p IN 1..1 ANY m GRAPH 'namedGraph' FILTER p.edges [0] .active == true RETURN v – Janul

答えて

1

はい、グラフを作成すると少し楽になりますが、グラフを使用せずにクエリを実行することはできます。

これは単なる直接3つのコレクションを使用して動作します例です。

FOR va IN VA 
FILTER va.name == 'Bob' 
    FOR e IN EC 
    FILTER e._from == va._id && e.active == true 
     FOR vb IN VB 
     FILTER e._to == vb._id 
     RETURN vb 

あなたは、グラフを使用する場合は、これは動作しますが、1をテストされている場合がありますように、なります

LET myOrigin = FIRST(FOR d IN VA FILTER d.name == 'Bob' RETURN d._id) 

FOR v, e, p IN 1..1 OUTBOUND myOrigin GRAPH 'GD' 
FILTER p.edges[0].active == true 
RETURN p.vertices[1] 

注意すべきことは、myOriginが_idである必要があります。これは、値を設定するときに値を割り当てる際にFIRST(...)を使用することを意味します。これにより、配列ではなく、単一の値(最初の値)を得ることができます。

あなたの例でも動作します:

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN v 

注意すべき事は、この例では、.name == 'Bob'を持つことができ、複数の文書として(複数のドキュメントに一致する可能性があり、それが一致VB内のすべてのノードを返すということです。

あなたはVBに接続されたVA内のどのエントリを示すために結果を望んでいた、と一致する複数のVA値を有するのオプションを持っていた場合、これはあなたを助ける:

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN { 
     origin: m, 
     connected_to: v 
    } 

あなたは結果をクリーンアップする場合は、結果を改善するためにUNSETを使用することができます。

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN { 
     origin: UNSET(m, '_key', '_rev'), 
     connected_to: UNSET(v, '_key', '_rev') 
    } 

それはちょうど、クエリであなたに送られた結果から、これらのキーを削除します。

データを取得する方法はたくさんあります。さまざまな例を見るだけで、AQLの感触を得ることができます。

関連する問題