如何在Cypher中写出负关系条件

时间:2017-12-20 10:04:02

标签: neo4j cypher

我写了一篇Cypher的声明:

match p=(:Fabric)-[:Child*]-(f:Fabric{code:'PC16-18121'})-[:Child*]-(ef:Fabric)
match (ef)-[:Refrence]-(r:RequestOrder)
return p,r

结果: image

但我想要另一个结果: Don't display the node that without ‘result’ relationship

问题:

如何在Cypher中写这个?

2 个答案:

答案 0 :(得分:1)

在InverseFalcon的例子的帮助下,我知道该怎么做:

match (f:Fabric{code:'PC16-18121'}),
(f)-[:Child*]->(:Fabric)-[:Refrence]-(r:RequestOrder)
where not (r)-[:Result]-()
return (f)-[:Child*]->(:Fabric),(:Fabric)-[:Child*]->(f),
(f)-[:Child*]->(:Fabric)-[:Refrence]-(r:RequestOrder)

结果是: Result Image

谢谢@InverseFalcon

答案 1 :(得分:0)

您可以添加模式谓词以指示您只需要:RequestOrders不:结果关系。

此外,我们可以稍微清理一下这个查询,目前它正在匹配:子*关系:织物两次。

match p=(:Fabric{code:'PC16-18121'})-[:Child*]-(:Fabric)-[:Refrence]-(r:RequestOrder) 
where not (r)-[:Result]-()
return p,r

您可能还需要更正拼写:图表中的参考。

编辑:获取所有的路径:FABRIC节点,试试这个:

match p=(:Fabric{code:'PC16-18121'})-[:Child*]-(f:Fabric)
optional match (f)-[:Refrence]-(r:RequestOrder)
where not (r)-[:Result]-()
return p,r