2016-07-26 8 views
1

に関連して、私は私のNeo4jにすべてのリストをマージしていない私が得たエラーがあるのNeo4jマージオブジェクトのリストとは、私が電話番号のリストを持っている他のノード

List<ContactPhoneNumber> phones = new List<ContactPhoneNumber>(); 

WebApiConfig.GraphClient.Cypher 
       .Unwind(phones, "node") 
       .CreateUnique("(isuser:BaseUser{guid: '" + userid + "'})-[:PHONES_FROM_DEVICE]->(isphone:ContactPhoneNumber)") 
       .Set("isphone = node") 
       .ExecuteWithoutResults(); 

存在する場合は、ユニークな関係を作成したいです

PatternException:結合していない模様! \ tempに\ c4dadf9 \ Neo4jClient \ GraphClient.cs:行1075 Dで Neo4jClient.GraphClient.Neo4jClient.IRawGraphClient.ExecuteCypher(CypherQuery クエリ)でのNeo4j

から

とスタックトレース\ N DでNeo4jClient.Cypher.CypherFluentQuery.ExecuteWithoutResults()で:\ TEMP \ c4dadf9 \ Neo4jClient \サイファー\のCypherFluentQuery.cs:ライン429

がどのように修正することができ、この問題?

CREATE UNIQUE

答えて

0

は、パターン内のノードのうちの少なくとも一つは、既存のノードに「結合」することが必要です。

WebApiConfig.GraphClient.Cypher 
    .Unwind(phones, "node") 
    .Merge("(isuser:BaseUser{ guid: {userid} })") 
    .CreateUnique("(isuser)-[:PHONES_FROM_DEVICE]->(isphone:ContactPhoneNumber {isPhone: node})") 
    .WithParam("userid", userid) 
    .ExecuteWithoutResults(); 

はそれ:

  • を取得するMERGEを使用します(または存在しない場合は作成します)、isuserを希望BaseUserノードを

    この文はあなたのために働くかもしれません。

  • "isuser"にバインドされたCREATE UNIQUEパターンを使用します。
  • SET句を削除し、CREATE UNIQUE句の中にisPhoneプロパティを割り当てます。これは重複を適切に防止するためです。
  • useridの値をパラメータとして渡します(より安全でパフォーマンスに優れています)。
+0

あなたのコードは、私は私がこのコード WebApiConfig.GraphClient.Cypher .Unwind使用し、私の問題 を解決するためだったと思う大きな助けでした(携帯電話を、 "ノード") .Merge(「(isuser:BaseUser {GUID: (isuser)」) .CreateUnique( "(isuser) - [:PHONES_FROM_DEVICE] - >(isphone)") .Merge( "(isphone:ContactPhoneNumber {phone:node.phone})") .ExecuteWithoutResults(); contactphonenumberノードにマージを追加します。おそらく電話に制約があります。 – shaharnakash

関連する問題