Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 对可选匹配子句的行为感到困惑_Neo4j - Fatal编程技术网

Neo4j 对可选匹配子句的行为感到困惑

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?]-()

在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?]-() 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子句的影响