2017-05-15 5 views
0

Ich versuche, Neo4JClient zu verwenden, um einen vorhandenen Knoten zu ersetzen. Ich bin immer noch ziemlich frisch mit Neo4j, also bin ich mir nicht sicher, ob ich das richtig mache. Die Abfrage sollte alle Eigenschaften des vorhandenen Knotens auf die des neuen Knotens aktualisieren.Neo4j: Vorhandenen Knoten ersetzen

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

Es ist unklar, was Sie versuchen zu tun. Können Sie mehr Details bereitstellen? Ihr Code erstellt nur dann einen neuen Knoten, wenn ein vorhandener Knoten mit demselben Muster nicht bereits vorhanden ist, und gibt entweder den ersten vorhandenen übereinstimmenden Knoten oder den neuen Knoten zurück. Es werden weder "Updates" noch "Ersetzungen" durchgeführt. – cybersam

+0

@cybersam Möchten Sie den vorhandenen Knoten aktualisieren. Wenn eine Eigenschaft anders ist, sollte sie die Werte des neuen Knotens erhalten. –

+0

Aber es gibt noch keinen "neuen" Knoten. Versuchen Sie einen neuen Knoten zu erstellen, wenn noch kein passender Knoten existiert? Und möchten Sie 'mergedEvent.ItemId' als" Schlüssel "zum Suchen des vorhandenen Knotens verwenden, oder möchten Sie' mergedEvent.ItemId' und 'mergedEvent.DateObserved' zusammen als Schlüssel verwenden? – cybersam

Antwort

1

sollten Sie entfernen den OnMatch() Anruf, da Sie die Eigenschaften auf neu erstellten Knoten sowie bestehende Knoten festlegen möchten.

 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();