Cypher/Neo4j-在union子句后添加约束

Cypher/Neo4j-在union子句后添加约束,neo4j,cypher,Neo4j,Cypher,我正在尝试创建一个查询生成器,我需要包含一个对union子句产生的结果的约束。我希望union子句的这个输出从我不希望出现在其末尾的节点列表中筛选出来 MATCH (n)-[r]->(x) WHERE ( 'filter1' IN r.property or 'filter2' IN r.property ) RETURN n,r,x UNION MATCH (n)-[r]->(x) WHERE ( 'foo2' IN n.property OR 'foo2' IN x.

我正在尝试创建一个查询生成器,我需要包含一个对union子句产生的结果的约束。我希望union子句的这个输出从我不希望出现在其末尾的节点列表中筛选出来

MATCH (n)-[r]->(x) 
WHERE ( 'filter1' IN r.property or  'filter2' IN r.property ) 
RETURN n,r,x 
UNION 
MATCH (n)-[r]->(x) 
WHERE ( 'foo2' IN n.property OR 'foo2' IN x.property 
RETURN n,r,x
作为一个例子,我需要在此查询中包含一个最终过滤器,以避免所有被称为“whatever”的节点

怎么做?只需在子句末尾添加一个where子句就可以了?

我几周前就有了,结果发现Cypher目前不支持

这意味着您应该使用相同的条件过滤联合的两个输入

或者(如中所述),如果您可以使用APOC,您可以对查询结果进行后处理:

CALL apoc.cypher.run("... UNION ...", NULL) YIELD n, r, x
WHERE ...
RETURN n, r, x;
更新:这在Neo4j 4.0中现在可以使用。

我几周前就有了,结果发现Cypher目前不支持

这意味着您应该使用相同的条件过滤联合的两个输入

或者(如中所述),如果您可以使用APOC,您可以对查询结果进行后处理:

CALL apoc.cypher.run("... UNION ...", NULL) YIELD n, r, x
WHERE ...
RETURN n, r, x;

更新:现在可以在Neo4j 4.0中使用。

查询应给出与示例“匹配(n)-[r]>(x)相同的结果,其中('filter1'在r.property中或'filter2'在r.property中),其中n.ID不等于'example'或x.ID不等于'example'返回n,r,x并集匹配(n)-[r]>(x)其中('foo2'在n.property中或'foo2'在x.property中)其中n.ID不等于'EXAMPLE'或x.ID不等于'EXAMPLE RETURN n,r,x“请编辑此问题注释。请注意,查询语法不正确,在
'EXAMPLE
后缺少撇号。查询应给出与此示例“匹配(n)-[r]>(x)”相同的结果,其中('filter1'在r.property中或'filter2'在r.property中)其中N.ID不等于'EXAMPLE'或X.ID不等于'EXAMPLE'返回N,r,X并集匹配(N)-[r]->(X)其中('foo2'在N.property中或'foo2'在X.property中)其中N.ID不等于'EXAMPLE'或X.ID不等于'EXAMPLE'返回N,r,X“请编辑此问题的注释。请注意,该查询在语法上不正确,在
'EXAMPLE
Gabor之后缺少一个撇号,您引用的问题的答案有一个使用APOC过程的解决方案。这应该可以解决问题。谢谢-从技术上讲可以,但我不认为重复相同的条件不行wice是一件非常糟糕的事情。因为,诀窍是排序,这不太容易实现。但我会用这个更新答案。谢谢。我最终向union和works的每个输入添加了相同的条件,但我不能使用APOC,因为我使用py2neo.MATCH(n)-(r]->(x)where('condition1'在r.property中)和(r.property2='condition2')和NOT(n.id='COMMON_-constraint'或x.id='COMMON_-constraint')返回n作为对象_-node,r作为关系,x作为谓词联合匹配(n)-[r]->(x),其中('EXPAND_-node'=n.id或'EXPAND_-node'=x.BEL)和NOT(n.id='COMMON_-constraint'或x.id='COMMON_-constraint'))返回n作为object_node,r作为relationship,x作为谓词“查询绑定的目的是绑定一个查询和图中某个节点的相邻节点,从结果查询中删除按id列出的节点”Gabor,你提到的问题的答案有一个使用APOC程序的解决方案。这应该可以做到。谢谢-从技术上说可以,但我不认为重复相同的条件两次是件坏事。因为,这个技巧是排序,不能这么容易实现。但我会用这个更新答案。谢谢。我知道了ally最终向union和works的每个输入中添加了相同的条件,但我不能使用APOC,因为我使用py2neo.MATCH(n)-[r]->(x)进行查询,其中('condition1'在r.property中)和(r.property2='condition2'),而不是(n.id='COMMON\u constraint'或x.id='COMMON\u constraint')返回n作为对象节点,r作为关系,x作为谓词联合匹配(n)-[r]->(x)其中('EXPAND_NODE'=n.id或'EXPAND_NODE'=x.BEL)而不是(n.id='COMMON_constraint'或x.id='COMMON_constraint'))返回n作为对象_节点,r作为关系,x作为谓词“查询绑定旨在绑定一个查询和图中节点的邻居节点,从结果查询中按id删除节点列表”