今天我正在为我的图形的某些部分编写DELETE查询,但我遇到了一些问题OPTIONAL MATCH
.
首先是示例图:
http://console.neo4j.org/r/micnvv
和
http://console.neo4j.org/?id=og6d9s
我想编写一个删除所有foo
和bar
实例的查询,问题是有时fooParent
不存在,还有一些情况,单个foo
将不连接到任何bar
.由于这些条件,我决定匹配fooParent
和查询中的bar
节点OPTIONAL MATCH
.
现在在第一个图形(其中fooParent
和bar
节点存在)中我想要的所有东西都匹配(foo1
和所有bar
节点)使用
MATCH (foo:Foo { customId: '1' })
OPTIONAL MATCH foo -[rel]-> bar,(fooParent: FooParent)-[fooParentRel]-> foo
RETURN foo, bar
Run Code Online (Sandbox Code Playgroud)
在第二个图中,我遇到的情况是fooParent
,给定foo
不存在且相同的查询与bar
节点不匹配- 只有foo
匹配,如您所见.
我认为这OPTIONAL MATCH
是我的方式,如果我的,但它似乎没有工作.
是的,因为一个OPTIONAL MATCH
条款
null
.在这种情况下,您OPTIONAL MATCH
包含两个部分:它尝试匹配Foo
具有传出关系(到某个条形图)和传入关系到a的节点FooParent
.
解决方案是拆分OPTIONAL MATCH
:
MATCH (foo:Foo { customId: '1' })
OPTIONAL MATCH foo -[rel]-> bar
OPTIONAL MATCH (fooParent: FooParent)-[fooParentRel]-> foo
RETURN foo, bar
Run Code Online (Sandbox Code Playgroud)