2017-05-15 11 views
0

既存のノードを置き換えるのにNeo4JClientを使用しようとしています。私はまだ新鮮なので、私はこれを正しくやっているかどうかはわかりません。クエリは、既存ノードのすべてのプロパティを新しいノードのプロパティに更新する必要があります。Neo4j:既存のノードを置換する

public static Node<VitalSignEvent> MergeVitalSignEvent(VitalSignEvent mergedEvent) 
    { 

     try 
     { 
      vsNode = DBUtils.DBService.Cypher 
       .Merge($"(evt:VitalSignEvent {{ItemId: {mergedEvent.ItemId}, DateObserved: {mergedEvent.DateObserved} }})") 
       .OnMatch() 
       .Set("evt = merged") 
       .WithParam("merged", mergedEvent) 
       .Return(evt => evt.As<Node<VitalSignEvent>>()) 
       .Results.FirstOrDefault(); 
     } 
     catch (Exception e) 
     { 
      LogException(nameof(MergeVitalSignEvent), e); 
     } 
     return vsNode; 
    } 
+1

あなたがしようとしていることは不明です。より詳細な情報を提供できますか?あなたのコードは、同じパターンを持つ既存のノードがまだ存在しない場合にのみ新しいノードを作成し、最初に存在する一致するノードまたは新しいノードを返します。 「更新」も「置換」も行われません。 – cybersam

+0

@cybersam既存のノードを更新します。いずれかのプロパティが異なる場合は、新しいノードの値を取得する必要があります。 –

+0

しかし、 "新しい"ノードはまだありません。一致するノードがまだ存在しない場合、新しいノードを作成しようとしていますか?既存のノードを見つけるための 'key 'として' mergedEvent.ItemId'を使いたいのですか、 'mergedEvent.ItemId'と' mergedEvent.DateObserved'をキーとして使いたいですか? – cybersam

答えて

1

あなたが新たに作成されたノード上の特性ならびに既存のノードを設定したいので、あなたは、OnMatch()コールを削除する必要があります。

 vsNode = DBUtils.DBService.Cypher 
      .Merge($"(evt:VitalSignEvent {{ItemId: {mergedEvent.ItemId}, DateObserved: {mergedEvent.DateObserved} }})") 
      .Set("evt = $merged") 
      .WithParam("merged", mergedEvent) 
      .Return(evt => evt.As<Node<VitalSignEvent>>()) 
      .Results.FirstOrDefault(); 
関連する問題