我犯过与属性类型不一致的错误。对于“人”类型的节点,有些有“external_id”属性的字符串,有些有int。我想删除所有属性为字符串的节点。下面的查询运行,似乎给出了正确的答案。
MATCH (n:person)
WHERE TOSTRING(n.external_id) = n.external_id
RETURN count(n)
但是,当我尝试使用以下查询删除这些节点时,我会得到“未知标识符'n'。”:
MATCH (n:person)
WHERE TOSTRING(n.external_id) = n.external_id
DELETE n
我是Neo4j和Cypher的新手,但这似乎应该很简单。我已经删除了这些节点的所有关系。我在这里错过了什么?
这是https://github.com/neo4j/neo4j/pull/5807修复的https://github.com/neo4j/neo4j/issues/5768的副本
事实证明,这是一个bug@JermyKendall建议的。它的出现只是因为我对人有唯一性约束。external_id
。我找到了一个简单的解决方法,将external_id
属性的值复制到每个人
节点的临时属性中(没有唯一性约束),然后删除该临时属性为字符串的所有节点。