2017-03-29 8 views
0

ドキュメントのリストを(アセンブリという名前のコレクション内に)インポートしました。属性の1つは「parent_id」です。 これに基づいて、この属性によって暗黙的に記述されたグラフを作成したいと思います。ArangoDB AQLを使用して属性からエッジを作成

"id","name","parent_id" 
"30","Top level" 
"30.1","30.1 Child 1","30" 
"30.2","30.2 Child 2","30" 

これは私が私に(それは親から子供にあるように、「含まれている」という名前の、)エッジコレクションを作成するための情報を与えることを期待することを、クエリです:

FOR assy IN assemblies 
    LET parent = (
    FOR parent IN assemblies 
     FILTER parent.id == assy.parent_id 
     RETURN parent 
) 
    RETURN {_from: parent._key, _to: assy._key} 

私は何間違っている?エッジを挿入するための完全なクエリを教えてください。

答えて

2

問題は、parentのサブクエリの結果が配列であり、ドキュメントではないことです。しかし、実際にはサブクエリは必要ありません。 joinを実行することもできます。この場合、パフォーマンスが向上し、読みやすくなります。 エッジのフィールド_from_toには、_keyの代わりに_idの値を使用する必要があります。

次のクエリは、まさにあなたが望むものです。

FOR assy IN assemblies 
    FOR parent IN assemblies 
    FILTER parent.id == assy.parent_id 
    INSERT {_from: parent._id, _to: assy._id} IN contains 
    RETURN NEW 

ノードRETURN NEWはオプションです。インポートが成功したかどうかを確認することができます。大量のデータを使用すると、これを削除します。

+0

ありがとうございました。フィールド "id"は、エンコードの問題のために、その前に2つの目に見えない文字があることが判明しました。 csvファイルを基本的なUTF-8に変換した後、それはうまくいった。コレクションをjsonにエクスポートしていたときにこれを見つけました。 –

関連する問題