🐕
ArangoDBのGraphをAQLで操作してみて理解する
で登録して落としてきた資料を参考にして作成しております
Graphデータ
こういうデータを用意しました
※TestVertexがDocument、TestEdgeがEdge
S->A
S->B
A->D
B->D
B->C
C->S
D->E
っていう流れ
TestEdge
[{"_key":"61443928","_id":"TestEdge/61443928","_from":"TestVertex/S","_to":"TestVertex/A","_rev":"_dDzuzhy---"},{"_key":"61444105","_id":"TestEdge/61444105","_from":"TestVertex/S","_to":"TestVertex/B","_rev":"_dDzwTHm---"},{"_key":"61444120","_id":"TestEdge/61444120","_from":"TestVertex/A","_to":"TestVertex/D","_rev":"_dDzwaLq---"},{"_key":"61444137","_id":"TestEdge/61444137","_from":"TestVertex/B","_to":"TestVertex/D","_rev":"_dDzwmtq---"},{"_key":"61444152","_id":"TestEdge/61444152","_from":"TestVertex/D","_to":"TestVertex/E","_rev":"_dDzwvfO---"},{"_key":"61444167","_id":"TestEdge/61444167","_from":"TestVertex/B","_to":"TestVertex/C","_rev":"_dDzw5uq---"},{"_key":"61444178","_id":"TestEdge/61444178","_from":"TestVertex/C","_to":"TestVertex/S","_rev":"_dDzx-Yu---"}]
TestVertex
[{"_key":"S","_id":"TestVertex/S","_rev":"_dDzt0Be---"},{"_key":"A","_id":"TestVertex/A","_rev":"_dDzt7U2---"},{"_key":"B","_id":"TestVertex/B","_rev":"_dDzuEe2---"},{"_key":"C","_id":"TestVertex/C","_rev":"_dDzuI9W---"},{"_key":"D","_id":"TestVertex/D","_rev":"_dDzuMKW---"},{"_key":"E","_id":"TestVertex/E","_rev":"_dDzuQwW---"}]
AQL操作
その1
// TestVertex/Sを起点として辿れる範囲を1から5で探索
FOR v, e, p IN 1..5 OUTBOUND 'TestVertex/S' TestEdge
// オプション指定
OPTIONS {
uniqueVertices: 'none', // uniqueVerticesはなし(頂点重複はしていい)
uniqueEdges: 'path' // uniqueEdgesはpathで(Edge(いわゆる頂点と頂点の間の線)の重複はなし)
}
// 算出されたデータ(_key)において間に->を挟んで出す
RETURN CONCAT_SEPARATOR('->', p.vertices[*]._key)
結果
[
"S->A",
"S->A->D",
"S->A->D->E",
"S->B",
"S->B->D",
"S->B->D->E",
"S->B->C",
"S->B->C->S",
"S->B->C->S->A",
"S->B->C->S->A->D"
]
その2
// TestVertex/Sを起点として辿れる範囲を0から5で探索
FOR v IN 0..5 OUTBOUND 'TestVertex/S' TestEdge
// オプション指定
OPTIONS {
bfs: true, // 幅優先探索
uniqueVertices: 'global' // 頂点において一度しか訪れないようにする
}
// 算出されたデータ(_key)を返す
RETURN v._key
結果
[
"S",
"B",
"A",
"C",
"D",
"E"
]
幅優先なのでSのあとAとB、その後にCとD、最後にEとなる
OPTIONS指定その他
に載っております
Discussion