私はarangodbで非常に新しく、非常に好きですが、私はクエリ文を作成するのに苦労しています。 私は2つのコレクション(VA、VB)とそれらの間のエッジを持っています 特定のフィルタ(_idではなく)でVaを検索し、ECに特定のプロパティを持つRETURNドキュメント(VB) 。アクティブ:true)ArangoDBが接続された頂点を見つける
ドキュメントでは、私は頂点がすでにわかっている例しか見つけませんでした。 ありがとうございます。 Jnl
私はarangodbで非常に新しく、非常に好きですが、私はクエリ文を作成するのに苦労しています。 私は2つのコレクション(VA、VB)とそれらの間のエッジを持っています 特定のフィルタ(_idではなく)でVaを検索し、ECに特定のプロパティを持つRETURNドキュメント(VB) 。アクティブ:true)ArangoDBが接続された頂点を見つける
ドキュメントでは、私は頂点がすでにわかっている例しか見つけませんでした。 ありがとうございます。 Jnl
はい、グラフを作成すると少し楽になりますが、グラフを使用せずにクエリを実行することはできます。
これは単なる直接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の感触を得ることができます。
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