2017-07-05 6 views
0

いくつかの異なるケースに応じてプロパティを使用してリレーションシップを作成しようとしています。私はFOREACHとCASEを使うことができると思った。Cypherで1つのCASE/FOREACHステートメントで複数のプロパティを追加する

LOAD CSV WITH HEADERS FROM 'file:///hwconnectIDs.csv' AS cnct 
MATCH (h1:hardware), (h2:hardware), (c:cable) 
WHERE (h1.hwID= cnct.conID1) AND (h2.hwID = cnct.conID2) AND (c.cableID =cnct.cableID) 
FOREACH (plugType IN 
      CASE WHEN (h1.plug1=c.plug1 AND c.plug2=h2.plug1) 
       THEN [c.plug1,c.plug2] 
      CASE WHEN (h1.plug2=c.plug2 AND c.plug1=h2.plug1) 
       THEN [c.plug2,c.plug1] 
      ELSE [] END 
      | 
      CREATE (h1)<-[:connect{plug:plugType[0]}]-(c)-[:connect{plug:plugType[1]}]->(h2) 
     ) 

問題:

  • 私がELSE-についてFOREACH
  • に変数plugTypeアレイ型を作成することはできませんようです。ここ

    は、私のコードの簡易版であります私は関係を全く作りたくないのですが。現時点では、関係プロパティプラグタイプの値は、存在しない関係全体ではなく空白になります。

注:WHERE条件は、正しいハードウェアデバイスとケーブルで作業していることを保証します。ファイルhwconnectIDs.csvは、基本的には、ケーブルCによってリンクされることを意図デバイスH1H2のリストを与えます。

/elseif /../ else他の言語では、のようなCypherのいくつかの異なるケースに従ってコマンドを実行する方法はありますか?

+0

を助けますが、エラーメッセージまたは類似を得るのですか? –

+0

私は前に1つあった。しかし、私は今これを試したときに、私は1つを取得しませんでした。それはちょうど "(変化なし、レコードなし)"と言いました。 –

+0

'MATCH'ステートメントで参照されているノードが確実に存在していますか? –

答えて

0

あなたはこの(下の簡素化のもの)のためのWITH句を活用することができる場合があります

... 
WITH h1, h2, c, 
CASE 
WHEN (h1.plug1=c.plug1 AND c.plug2=h2.plug1) THEN [c.plug1,c.plug2] 
WHEN (h1.plug2=c.plug2 AND c.plug1=h2.plug1) THEN [c.plug2,c.plug1] 
ELSE [] END AS plugtype 
CREATE ... 

希望これは、 トム

+0

私はそれについても考えました。問題は:私はまだ実際にケーブルノードを持っていない。私のデータモデルは、2つのデバイス間の関係の一部としてケーブルノードを作成するのが理にかなっているので、私のコードでは、関係を作成する直前にケーブルを作成します。たぶん私はケーブルの作成と関係作成を分けて、ケーブルを参照できるようにしてください。 –

+0

さて、あなたの説明から理解できると思うファイルに、実際の接続が含まれていれば(ケーブルを作成するときには)、それを一度実行して2回目の実行で関係を実行します。あなたは一気にすべてを行うことができます...しかし、何百万というノードがそれを2回通過しても、それほど時間がかからず、1つの複雑なクエリの代わりに2つのより単純なクエリがあります。ただし、あらかじめhwIDとcableIDに制約を作成してください。 –

+0

上記のコードでクエリを実行しました。私はいくつかの他の問題を引き起こした最初のケ​​ーブルを作成する必要がありました。私はpy2neoでこれを回避しようとしています。 –

関連する問題