【问题标题】:Neo4j/Cypher Delete with Where "Unknown identifier"Neo4j/Cypher 使用“未知标识符”删除
【发布时间】: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 属性上存在唯一约束时。闻起来像虫子。

标签: neo4j cypher


【解决方案1】:
【解决方案2】:

事实证明这是@JeremyKendall 建议的错误。它只是因为我对person.external_id 有唯一性约束而出现。我找到了一个简单的解决方法,将external_id 属性的值复制到每个person 节点上的临时属性中(没有唯一性约束),然后删除该临时属性为字符串的所有节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2022-10-19
    • 1970-01-01
    相关资源
    最近更新 更多