I'm trying to use Neo4JClient to replace an existing node. I'm still rather fresh with Neo4j so i'm not sure if I'm doing this correctly. The query should update all the properties on the existing node to those of the new node.
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;
}
You should remove the OnMatch()
call, since you want to set the properties on newly created nodes as well as existing nodes.
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();