给出这个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; -----------
任何解决方案?
答案 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