在Neo4j 2.0下运行。
我使用名为“type”的数组属性设计了一个Node类型系统。这是在标签之前完成的,我最终可能会转而使用标签。现在,我有以下删除查询:
START n = node(*) OPTIONAL MATCH n-[r]-() WHERE ANY(x in n.type WHERE x = 'TestType') DELETE n, r
请注意,在Neo4j 2.0之前,我使用了以下查询,该工作正常:
START n = node(*) MATCH n-[r?]-() WHERE ANY(x in n.type WHERE x = 'TestType') DELETE n, r
目的是删除所有类型为“TestType”的节点。 (OPTIONAL MATCH子句用于删除可能存在的任何关系,因此可以删除节点。)但是,这也会导致删除其他类型的节点。如果我删除OPTIONAL MATCH子句(并假设节点没有关系),这将按预期工作,只删除“TestType”类型的节点。
在尝试调试时,我将DELETE更改为RETURN并使用OPTIONAL MATCH子句查看了所有类型的节点。当我删除OPTIONAL MATCH子句时,只返回类型为'TestType'的节点。
这是一个错误还是我没有正确使用OPTIONAL MATCH?
感谢。
附录:
Dan G建议的查询产生了同样不正确的结果。找到所有节点而不仅仅是具有给定类型的节点。但是,以下查询有效,尽管我不太明白为什么我需要这样做:
START n=node(*)
WHERE 'TestType' IN n.`Node-typenames`
WITH n
OPTIONAL MATCH n-[r]-() DELETE n,r
有人可以帮助我更好地理解这一点吗?
答案 0 :(得分:0)
以下工作如何:
Match (n)
optional match (n)-[r]->()
where 'TestType' in n.type
delete n,r