Arangodb-aql-example-queries
ArangoDB-AQLのクエリ例
この章では、 Actors and Movies データベースでのいくつかのAQLサンプルクエリを検討します。 これらのクエリはグラフに基づいています。
問題
以下に示すように頂点を接続するために、俳優のコレクションと映画のコレクション、およびactInエッジコレクション(年プロパティ付き)を指定します-
どのように取得しますか-
- 「movie1」または「movie2」で演技したすべての俳優ですか?
- 「movie1」と「movie2」の両方で演技したすべての俳優は?
- 「actor1」と「actor2」の間のすべての一般的な映画は?
- 3本以上の映画に出演したすべての俳優は?
- ちょうど6人の俳優が出演したすべての映画ですか?
- 映画による俳優の数は?
- 俳優による映画の数は?
- 2005年から2010年の間に俳優が演じた映画の数は?
溶液
上記のクエリに対する解答を取得する過程で、Arangoshを使用してデータセットを作成し、クエリを実行します。 AQLクエリはすべて文字列であり、Arangoshの代わりにお気に入りのドライバーに簡単にコピーできます。
Arangoshでテストデータセットを作成することから始めましょう。 まず、C:%5CApache24%5Chtdocs%5Carangodb%5Cdataset.js [このファイル]をダウンロードします−
出力
上記の出力から、JavaScriptファイル* dataset.js。がダウンロードされていることがわかります。このファイルには、データベースにデータセットを作成するためのArangoshコマンドが含まれています。 コマンドを1つずつコピーして貼り付ける代わりに、Arangoshで-javascript.execute *オプションを使用して、複数のコマンドを非対話的に実行します。 命の恩人のコマンドと考えてください!
今シェルで次のコマンドを実行します-
上記のスクリーンショットでわかるように、プロンプトが表示されたらパスワードを入力します。 これでデータが保存されたので、AQLクエリを作成して、この章の最初に挙げた特定の質問に答えます。
最初の質問
最初の質問を見てみましょう:「movie1」または「movie2」で演技したすべての俳優。 「TheMatrix」または「TheDevilsAdvocate」で行動したすべての俳優の名前を見つけたいとします-
私たちは俳優の名前を取得するために一度に1つの映画から始めます-
出力
私たちは次の出力を受け取ります-
今、私たちは解決策になる2つのNEIGHBORSクエリのUNION_DISTINCTを形成し続けます-
出力
二番目の質問
2番目の質問を考えてみましょう:「movie1」と「movie2」の両方で演技したすべての俳優。 これは上記の質問とほとんど同じです。 しかし、今回はUNIONではなくINTERSECTIONに興味があります-
出力
私たちは次の出力を受け取ります-
第三の質問
3番目の質問を考えてみましょう:「actor1」と「actor2」の間のすべての一般的な映画。 これは実際には、movie1とmovie2の一般的な俳優に関する質問と同じです。 開始頂点を変更するだけです。 例として、Hugo Weaving( "Hugo")とKeanu Reevesが共演しているすべての映画を見つけましょう-
出力
私たちは次の出力を受け取ります-
4番目の質問
4番目の質問について考えてみましょう。 * 3本以上の映画に出演したすべての俳優*。 この質問は異なります。ここでは隣接関数を使用できません。 代わりに、エッジインデックスとグループ化にAQLのCOLLECTステートメントを使用します。 基本的な考え方は、 startVertex (このデータセットでは常にアクターです)によってすべてのエッジをグループ化することです。 次に、ここで俳優が演じた映画の数を含めたので、結果から3本未満の映画を持つすべての俳優を削除します-
出力
残りの質問については、クエリの形成について説明し、クエリのみを提供します。 リーダーは、Arangoshターミナルでクエリを実行する必要があります。
5番目の質問
5番目の質問を考えてみましょう:正確に6人の俳優が出演したすべての映画。 前のクエリと同じ考え方ですが、等価フィルタを使用します。 しかし、今では俳優の代わりに映画が必要なので、* _to属性*を返します-
映画による俳優の数は?
エッジのデータセット _to で映画に対応しているのを覚えているので、同じ _to が表示される頻度をカウントします。 これはアクターの数です。 クエリは以前のものとほとんど同じですが、COLLECTの後に* FILTERなし*
6番目の質問
6番目の質問:*俳優による映画の数*を考えてみましょう。
上記のクエリの解決策を見つける方法は、このクエリの解決策も見つけるのに役立ちます。