Neo4j:替换现有节点
Neo4j : Replace Existing Node
我正在尝试使用 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;
}
您应该删除 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();
我正在尝试使用 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;
}
您应该删除 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();