【发布时间】:2016-01-11 23:18:56
【问题描述】:
我犯了与属性类型不一致的错误。对于“person”类型的节点,有些具有“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 的新手,但这看起来应该很简单。我已经删除了这些节点的所有关系。我在这里错过了什么?
【问题讨论】:
-
好像是解析异常,你能用
DETACH DELETE代替DELETE试试 -
我使用的是 Neo4j 2.2.5,所以
DETACH不可用。但我认为这无关紧要,我尝试删除的节点没有任何关系。 -
好吧,我刚刚在 2.3.1 中测试过,没有 DETACH DELETE 它也不起作用。我会启动一个 2.2.5 版本来检查。
-
作为一个健全的检查,如果真的还有关系,试试这个: MATCH (n:person) WHERE TOSTRING(n.external_id)= n.external_id OPTIONAL MATCH (n)-[r] -() 删除 r, n;
-
@BrianUnderwood 我昨天做了一些测试。原来这个问题只发生在
DELETE子句中,并且只有在n.external_id属性上存在唯一约束时。闻起来像虫子。