Neo4j 对可选匹配子句的行为感到困惑
在Neo4j 2.0下运行此功能 我使用名为“type”的数组属性设计了一个节点类型系统。这是在使用标签之前完成的,我可能最终会切换到使用标签。目前,我有以下删除查询:Neo4j 对可选匹配子句的行为感到困惑,neo4j,Neo4j,在Neo4j 2.0下运行此功能 我使用名为“type”的数组属性设计了一个节点类型系统。这是在使用标签之前完成的,我可能最终会切换到使用标签。目前,我有以下删除查询: 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?]-()
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”的所有节点。(可选的MATCH子句用于删除可能存在的任何关系,以便可以删除节点。)但是,这也会导致删除其他类型的节点。如果我删除可选的MATCH子句(并假设节点没有关系),这将按预期工作,并且只删除“TestType”类型的节点
在尝试调试时,我将DELETE改为RETURN,并看到使用可选的MATCH子句返回了所有类型的节点。当我删除可选的MATCH子句时,只返回“TestType”类型的节点
这是一个bug还是我没有正确使用可选匹配
谢谢
增编:
Dan G建议的查询产生了同样不正确的结果。找到了所有节点,而不仅仅是具有给定类型的节点。尽管我不太明白为什么我需要这样做,但以下查询仍然有效:
START n=node(*)
WHERE 'TestType' IN n.`Node-typenames`
WITH n
OPTIONAL MATCH n-[r]-() DELETE n,r
有人能帮我更好地理解这一点吗?是否需要以下工作:
Match (n)
optional match (n)-[r]->()
where 'TestType' in n.type
delete n,r
我试试看。但这并不能解释为什么我原来的查询不起作用,为什么它会受到可选MATCH子句的影响