我最近将我的Neo4j数据库升级到v.3(3.0.6)。从那时起,我在尝试使用Cypher删除节点时遇到了麻烦。这是升级后的一个新问题。他们Cypher的查询是:
MATCH (p) WHERE id(p) = 83624
OPTIONAL MATCH (p)-[r]-(n)
OPTIONAL MATCH (p)-[r2]-(n2)
WHERE NOT ('Entity' in labels(n2))
DELETE r, r2, p, n2
现在导致错误Unable to load NODE with id 83624
使用RETURN
而非DELETE
的确切查询将返回节点。我还尝试用DELETE
节点交换DETACH DELETE
,但这给了我同样的错误。
看起来之前已经问过这个问题但没有解决方案。知道是什么导致了这个错误吗?
答案 0 :(得分:0)
我对此查询感到有些困惑。两个可选匹配都是相同的,因为它们将匹配与连接到p的任何节点的任何关系。
让我确保理解您尝试做的事情:按ID查找节点,然后删除该节点以及任何不是实体的连接节点(以及连接它们的关系)。是吗?
如果是这样,此查询可能会更好:
MATCH (p) WHERE id(p) = 83624
OPTIONAL MATCH (p)--(n)
WHERE NOT n:Entity
DETACH DELETE n
DETACH DELETE p
分离节点会删除连接到该节点的所有关系,并且只能删除关系为零的节点。
另外,请注意,使用内部ID进行唯一标识节点并不是一个好主意。建议使用您自己的唯一ID,并为该标签的该属性创建唯一约束。