2017-05-15 5 views
0

J'essaie d'utiliser Neo4JClient pour remplacer un nœud existant. Je suis encore assez fraîche avec Neo4j donc je ne suis pas sûre de le faire correctement. La requête doit mettre à jour toutes les propriétés du noeud existant vers celles du nouveau noeud.Neo4j: Remplacer le nœud existant

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

On ne sait pas ce que vous essayez de faire. Pouvez-vous fournir plus de détails? Votre code créera un nouveau nœud uniquement si un nœud existant avec le même modèle n'existe pas déjà et qu'il renvoie le premier nœud correspondant existant ou le nouveau nœud. Ni les "mises à jour" ni les "remplacements" ne sont effectués. – cybersam

+0

@ cybersam Voulez-vous mettre à jour le nœud existant. Si une propriété est différente, elle doit obtenir les valeurs du nouveau nœud. –

+0

Mais il n'y a pas encore de "nouveau" nœud. Essayez-vous de créer un nouveau nœud si un nœud correspondant n'existe pas encore? Et voulez-vous utiliser 'mergedEvent.ItemId' comme" clé "pour trouver le nœud existant, ou voulez-vous utiliser' mergedEvent.ItemId' et 'mergedEvent.DateObserved' ensemble comme clé? – cybersam

Répondre

1

Vous devez supprimer l'appel OnMatch(), puisque vous voulez définir les propriétés sur les nœuds nouvellement créés ainsi que les noeuds existants.

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