Neo4j错误:节点xxx已在此事务中删除
似乎此密码会导致此错误:节点xxx已在此事务中被删除Neo4j错误:节点xxx已在此事务中删除,neo4j,cypher,Neo4j,Cypher,似乎此密码会导致此错误:节点xxx已在此事务中被删除 MATCH (a:Address), (b:Address), (a)-[r:BelongTo]->(:Wallet), (b)-[:BelongTo]->(:Wallet) WHERE a.AddId=b.AddId AND ID(a) > ID(b) WITH r, a, b, a {.*, rel: r {.*, type:type(r)}} as snapshot DELETE r WITH a, b, snaps
MATCH (a:Address), (b:Address), (a)-[r:BelongTo]->(:Wallet), (b)-[:BelongTo]->(:Wallet)
WHERE a.AddId=b.AddId AND ID(a) > ID(b)
WITH r, a, b, a {.*, rel: r {.*, type:type(r)}} as snapshot
DELETE r
WITH a, b, snapshot ------------------*
DELETE a -------------------*
WITH b, snapshot
MERGE (c:Address {uniqueReferenceAddr:(...)})
ON CREATE SET c.AddId=snapshot.AddId,..."
WITH c, b, snapshot
MATCH (wa:Wallet) WHERE snapshot.rel.primWallAddr=wa.primWallAddr
MERGE (c)-[r:BelongTo{uniqueReferenceBelongTo:(c.AddId + wa.primWallAddr)}]->(wa)
ON CREATE SET r.primWallAddr = wa.primWallAddr
WITH c, b
MATCH (b)-[r0:BelongTo]->(wa:Wallet)
WITH wa, c, b, r0
MERGE (c)-[r1:BelongTo{uniqueReferenceBelongTo:(c.AddId + wa.primWallAddr)}]->(wa)
ON CREATE SET r1.primWallAddr = wa.primWallAddr
WITH b, r0
DELETE r0
WITH b
DELETE b
删除标记为*的两行时,会引发此错误:无法删除节点xxx(与前面提到的错误中的id相同),因为仍有连接到它的关系。(沿着这条线的东西)
可能相关的数据:
(id:13557)
primWallAddr 1MEe2mebed8wopvy8xyjjHcEQHUPVJn2UC
multiExist false
first_seen 2014-09-29T20:03:42
addr_tag_link null
last_seen 2017-02-03T05:48:14
addr_tag null
uniqueReferenceAddr 1ERfjthAH9T3PDtFcpkzudha89ABkD9RgSnullnull1MEe2mebed8wopvy8xyjjHcEQHUPVJn2UCfalse
AddId 1ERfjthAH9T3PDtFcpkzudha89ABkD9RgS
b: (id: 13563)
primWallAddr 1KumbRsTcA6UNqU2MHEfqEFnAZYU3w3izR
multiExist false
first_seen 2014-09-29T20:03:42
addr_tag_link null
last_seen 2017-02-03T05:48:14
addr_tag null
uniqueReferenceAddr 1ERfjthAH9T3PDtFcpkzudha89ABkD9RgSnullnull1KumbRsTcA6UNqU2MHEfqEFnAZYU3w3izRfalse
AddId 1ERfjthAH9T3PDtFcpkzudha89ABkD9RgS
(id: 13564)
primWallAddr 1Lsqcv4cg5zUctNi2qwNxMkrv1GeBboSUJ
multiExist false
first_seen 2014-09-29T20:03:42
addr_tag_link null
last_seen 2017-02-03T05:48:14
addr_tag null
uniqueReferenceAddr 1ERfjthAH9T3PDtFcpkzudha89ABkD9RgSnullnull1Lsqcv4cg5zUctNi2qwNxMkrv1GeBboSUJfalse
AddId 1ERfjthAH9T3PDtFcpkzudha89ABkD9RgS
此处显示的所有节点都是地址节点,它们都与一个(且仅一个)钱包节点有关系,该节点名为:BelongTo
设置地址和钱包节点的约束:
CREATE CONSTRAINT ON (addr:Address) ASSERT addr.uniqueReferenceAddr IS UNIQUE
CREATE CONSTRAINT ON (wa:Wallet) ASSERT wa.primWallAddr IS UNIQUE
用于生成地址节点的密码:
LOAD CSV... as line
MERGE (a:Address {uniqueReferenceAddr:(...)})
ON CREATE SET a.AddId=line[0],...
用于生成钱包节点的密码:
LOAD CSV... as line
MERGE (w:Wallet { primWallAddr:line[0]})
ON CREATE SET w.first_seen = line[1]...
MATCH (addr:Address), (wa:Wallet) WHERE addr.primWallAddr=wa.primWallAddr
MERGE (addr)-[r:BelongTo{uniqueReferenceBelongTo:(...)}]->(wa)
ON CREATE SET ...
用于将地址节点链接到相应钱包节点的密码:
LOAD CSV... as line
MERGE (w:Wallet { primWallAddr:line[0]})
ON CREATE SET w.first_seen = line[1]...
MATCH (addr:Address), (wa:Wallet) WHERE addr.primWallAddr=wa.primWallAddr
MERGE (addr)-[r:BelongTo{uniqueReferenceBelongTo:(...)}]->(wa)
ON CREATE SET ...
第一个查询在运行这三个查询之后运行
有人知道原因是什么吗 你能展示示例数据吗?另外,如果您想删除节点及其关系,可以使用
DETACH delete a
@stdob--我知道DETACH delete
,但我现在不想使用ito,因为我不确定查询的其他部分是否正常工作。比如说数据,因为涉及的数据量很大,所以会比较困难。如果你愿意,我可以给你全部代码。(这是一个运行密码的java程序。)如果您愿意,我还可以向您发送触发此错误的csv文件。(我的密码首先从csv文件加载数据。)我知道这一点。但正如我所说的,由于涉及大量数据,这很困难。我刚刚找到了一种获取相关数据的方法,这是三个节点的数据(其中两个是这里关注的节点,我不知道是哪两个)。你能用cypher
显示一个数据示例来添加它们吗?