Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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_Cypher - Fatal编程技术网

Neo4j 如果节点与某个参数有关系,如何从匹配中排除节点

Neo4j 如果节点与某个参数有关系,如何从匹配中排除节点,neo4j,cypher,Neo4j,Cypher,我创建了一些描述流程的节点。使用相当标准的最佳实践,它看起来像这样: (process:Process)-[:FIRST_STEP {parent:id(process)}]->(step1:Step)-[:NEXT {parent:id(process)}]->etc. 因此,它是流程类型的父节点,后面是一组步骤,每个步骤类型,从父节点开始的每个关系都有一个具有父流程id的父属性 这样做的目的是使一个步骤可以包含在多个流程中,并且效果非常好 现在我需要删除一个进程及其所有步骤。我

我创建了一些描述流程的节点。使用相当标准的最佳实践,它看起来像这样:

(process:Process)-[:FIRST_STEP {parent:id(process)}]->(step1:Step)-[:NEXT {parent:id(process)}]->etc.
因此,它是流程类型的父节点,后面是一组步骤,每个步骤类型,从父节点开始的每个关系都有一个具有父流程id的父属性

这样做的目的是使一个步骤可以包含在多个流程中,并且效果非常好

现在我需要删除一个进程及其所有步骤。我要避免的是删除父进程中属于另一个进程的步骤字符串的任何子步骤

我的第一步是:

match(p:Process)-[rel:FIRST_STEP | :NEXT* {parent:id(p)}]->(step)
where id(p) = 1234
return p, step
这将返回流程和所有步骤。现在我不想返回其他进程所说的任何步骤。这就是我所拥有的,但它不起作用,我可以使用任何想法:

match(p:Process)-[rel:FIRST_STEP | :NEXT* {parent:id(p)}]->(step)
where id(p) = 1234
and not exists(
 (step)<-[otherrelation:FIRST_STEP|NEXT]-() WHERE otherrelation.parent <> id(p)
)
match(p:Process)-[rel:FIRST_STEP |:NEXT*{parent:id(p)}]>(步骤)
其中id(p)=1234
而且不存在(

(步骤)问题在于
EXISTS()
NOT EXISTS()
中的模式不能用于引入新变量,比如
其他关系

在缺少
EXCLUDE MATCH
子句的情况下,我们必须在不需要的模式上使用
可选匹配
,然后在存在匹配模式的地方修剪匹配

MATCH(p:Process)-[rel:FIRST_STEP | :NEXT* {parent:id(p)}]->(step) 
WHERE id(p) = 1234
WITH p, rel, step
OPTIONAL MATCH (step)<-[otherrelation:FIRST_STEP|NEXT]-() 
WHERE otherrelation.parent <> id(p)
WITH p, rel, step
WHERE otherrelation IS NULL
...
MATCH(p:Process)-[rel:FIRST_STEP |:NEXT*{parent:id(p)}]>(步骤)
其中id(p)=1234
用p,rel,step

可选匹配(步骤)问题在于
EXISTS()
notexists()
中的模式不能用于引入新变量,如
其他关系

在缺少
EXCLUDE MATCH
子句的情况下,我们必须在不需要的模式上使用
可选匹配
,然后在存在匹配模式的地方修剪匹配

MATCH(p:Process)-[rel:FIRST_STEP | :NEXT* {parent:id(p)}]->(step) 
WHERE id(p) = 1234
WITH p, rel, step
OPTIONAL MATCH (step)<-[otherrelation:FIRST_STEP|NEXT]-() 
WHERE otherrelation.parent <> id(p)
WITH p, rel, step
WHERE otherrelation IS NULL
...
MATCH(p:Process)-[rel:FIRST_STEP |:NEXT*{parent:id(p)}]>(步骤)
其中id(p)=1234
用p,rel,step

可选匹配(步骤)谢谢!这比我最后做的更直截了当。可选匹配是我没有看到的微妙之处。我会给你更多的投票,但我的声誉仍然太低。谢谢!这比我最后做的更直截了当。可选匹配是我没有看到的微妙之处.我想给你更多的选票,但我的声誉还是太低了。