neo4j col节点(a) - [:r) - > b

时间:2018-01-20 05:32:55

标签: neo4j cypher

给出这个Neo4j图:

//创建节点A ----------------------------------------- ------

MERGE(x:A {name:'01 -A'})

MERGE(x:A {name:'02 -A'})

MERGE(x:A {name:'03 -A'})

MERGE(x:A {name:'04 -A'})

MERGE(x:A {name:'05 -A'})

//返回五个节点----------------------------------------- ------

MATCH(x:A)返回x

//创建节点B ----------------------------------------- ------

MERGE(y:B {name:'01 -B'})

MATCH(x:B)返回x

//建立关系船------------------------------------------ -----

匹配(x:A {名称:'01 -A'}),(y:B {名称:'01 -B'})合并(x)&lt; - [r:C] - (y)< / p>

匹配(x:A {名称:'03 -A'}),(y:B {名称:'01 -B'})合并(x)&lt; - [r:C] - (y)< / p>

匹配(x:A {名称:'05 -A'}),(y:B {名称:'01 -B'})合并(x)&lt; - [r:C] - (y)< / p>

//显示关系船

match() - [r] - (y:B {name:'01 -B'})返回类型(r)

型(R)

“C”

“C”

“C”

//显示与Node B关联的节点A

匹配(x:A) - [r:C] - (y:B)其中((x) - [*] - (y))返回x

{   “名字”:“05-A” } {   “名字”:“03-A” } {   “名字”:“01-A” }

//显示A节点没有关系节点B

匹配(x:A) - [r:C] - (y:B)其中NOT((x) - [*] - (y))返回x

(没有变化,没有记录)

------------&GT; 这是错误的,因为节点A2和节点A4与B1没有关系 &LT; -----------

任何解决方案?

1 个答案:

答案 0 :(得分:0)

感谢您更新的说明。

问题是你的MATCH已经选择了符合模式的节点。

match (x:A)-[r:C]-(y:B) 
where NOT ((x)-[*]-(y)) 
return x`

这是一个荒谬的查询。您要求任何:图中的A和:B节点通过关系连接:C节点未连接,不存在此类模式。

根据您的说明,您需要Display the A Nodes does not have relation ship Node B。以下是您要查询的方法:

match (x:A)
where not (x)-[:C]-(:B) 
return x

如果您不关心关系类型,可以省略该部分:

match (x:A)
where not (x)--(:B) 
return x

如果你想在A和a:B节点之间没有可能的路径,那么你可以使用*来指示:A节点和任何:B节点之间的任何大小的路径:

match (x:A)
where not (x)-[*]-(:B) 
return x