2017-06-18 6 views
3

私はapoc.load.json()を1回呼び出すだけで、複数の配列プロパティをUNWINDしようとしています。私が持っているバージョンは完全には機能しません。いくつかの関係はロードされません。私の推測では、それはWITHコマンドによる出力の配管によるものです。配列ベースのプロパティごとにアンワインドを別々に実行すると、すべての負荷がかかることがありますが、どのようにまとめて行うことができるのか不思議です。JSONファイルからロードされた無関係の複数の配列をアンワインド

任意の洞察力とポインタが高く評価されている=)

//LOAD CLASSES AND UNWIND COMMON ITEMS,COMPANIONS,LOCATIONS 
CALL apoc.load.json("file:///c://pathToFile//classes.json") YIELD value AS class 
MERGE (c:Class {name: class.name}) 
SET 
c.strength = class.strength, 
c.intelligence = class.intelligence, 
c.dexterity = class.dexterity, 

WITH c, class.items AS items, class.companions AS companions, class.locations AS locations 
UNWIND items AS item 
UNWIND companions AS companion 
UNWIND locations AS location 

MERGE (i:Item {name: item}) 
MERGE (i)-[:LIKELY_HAS]->(c) 
MERGE (c)-[:LIKELY_BELONGS_TO]->(i) 

MERGE (comp:Class {name: companion}) 
MERGE (comp)-[:LIKELY_COMPANION_OF]->(c) 
MERGE (c)-[:LIKELY_ACCOMPANIED_BY]->(comp) 

MERGE (l:Location {name: location}) 
MERGE (l)-[:LIKELY_LOCATION_OF]->(c) 
MERGE (c)-[:LIKELY_LOCATED_IN]->(l) 

JSONファイル内のエントリの例:

{ 
    "name": "KNIGHT", 
    "strength": [75,100], 
    "intelligence": [40,80], 
    "dexterity": [40,85], 
    "items": [ 
     "SWORD", 
     "SHIELD" 
    ], 
    "companions":[ 
     "KNIGHT", 
     "SERVANT", 
     "STEED" 
    ], 
    "locations": [ 
     "CASTLE", 
     "VILLAGE", 
     "CITY" 
    ] 
} 
+3

jsonファイルのオブジェクトを貼り付けることはできますか? –

+0

良い点;完了=) – VeraKozya

答えて

2

ここでの実際の問題は、あなたのSET句の最後の行の間だけで不要,ですWITH句を使用します。それを取り除くと、構文エラーを取り除くことができます。

つまり、アンワインドされた値に作用する節を各UNWINDにグループ化することを強くお勧めします。resetting the cardinalityは、次のUNWINDと処理を実行する前に1行に戻ります。このようなもの:

//LOAD CLASSES AND UNWIND COMMON ITEMS,COMPANIONS,LOCATIONS 
CALL apoc.load.json("file:///c://pathToFile//classes.json") YIELD value AS class 
MERGE (c:Class {name: class.name}) 
SET 
c.strength = class.strength, 
c.intelligence = class.intelligence, 
c.dexterity = class.dexterity 

WITH c, class 

UNWIND class.items AS item 
MERGE (i:Item {name: item}) 
MERGE (i)-[:LIKELY_HAS]->(c) 
MERGE (c)-[:LIKELY_BELONGS_TO]->(i) 

WITH distinct c, class 
UNWIND class.companions AS companion 
MERGE (comp:Class {name: companion}) 
MERGE (comp)-[:LIKELY_COMPANION_OF]->(c) 
MERGE (c)-[:LIKELY_ACCOMPANIED_BY]->(comp) 

WITH distinct c, class 
UNWIND class.locations AS location 
MERGE (l:Location {name: location}) 
MERGE (l)-[:LIKELY_LOCATION_OF]->(c) 
MERGE (c)-[:LIKELY_LOCATED_IN]->(l) 
+0

ありがとう!それは動作します:D 以前は独自の属性を持つUNWINDを持っていましたが、余分なものなしで動作させることはできませんでした。 "WITH distinct C、class" – VeraKozya

関連する問題