我最近从Neo4j 2.0.1升级到Neo4j 2.1.2,并在尝试删除节点时开始收到新错误。
此代码在2.0.1中工作,用于删除连接其他两个节点的节点,并用双向关系替换它。
MATCH (a:node {id: 1})
WITH a
MATCH (b1:node)-[:rel]->(a)<-[:rel]-(b2:node)
CREATE UNIQUE (b1)-[:rel]->(b2), (b2)-[:rel]->(b1)
WITH a
OPTIONAL MATCH (a)-[r]-()
DELETE a, r
但在2.1.2中产生以下错误:
{Code:"Neo.DatabaseError.Statement.ExecutionFailure", Message:"Node 4746 has been deleted"}
我尝试将其更改为:
MATCH (b1:node)-[r1:rel]->(a)<-[r2:rel]-(b2:node)
CREATE UNIQUE (b1)-[:rel]->(b2), (b2)-[:rel]->(b1)
DELETE r1, r2, a
但我仍然收到相同的错误消息。我也尝试将DELETE放在同一事务中的不同语句中,但也失败了。我检查了Cypher中事务中的所有语句,并且在删除后从不再访问过r1和r2。删除此语句中的DELETE会导致事务成功。
在交易过程中删除节点的正确方法是什么?
更新
我无法得到这个bug的坚定责备,但肯定有问题。一切都会正常工作然后突然我会开始收到有关节点被删除或关系未找到的错误消息。
我已将其缩小到以下查询:
MATCH (a:activity {id: { param0 } }), (i:file {id: { param1 } })
CREATE (i)-[:HISTORY {id: i.id}]->(a)
WITH a, i
MATCH (i)-[r:HISTORY {id: i.id}]->(ph:activity)
WHERE ph.id <> a.id
CREATE (a)-[:HISTORY {id: i.id}]->(ph)
DELETE r
我将此作为较大事务的一部分发出,但删除DELETE r
会导致永远不会生成错误消息。否则我随机得到:
ErrorCode:&#34;&#34;, Raw:&amp; errors.errorString {s:&#34; Neo4j返回无法加载ID为2397的RELATIONSHIP。(Neo.ClientError.Statement.EntityNotFound)&#34;},
奇怪的是,即使事务产生错误,事务也会成功并且不会回滚。在这一点上,我认为这是一个时间问题,这就是为什么我不能得到一个坚实的责任。我是否可以启用其他调试来帮助追踪问题?