今天我正在为我的图表的某些部分编写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
在第二个图表中,我发现给定fooParent
的{{1}}不存在且同一查询与foo
个节点不匹配 - 只有bar
匹配为你可以看到。
我当时认为foo
是我的方式,但是它似乎没有用。
答案 0 :(得分:5)
是的,因为OPTIONAL MATCH
条款
null
。在这种情况下,您的OPTIONAL MATCH
包含两部分:它尝试匹配具有传出关系的Foo
个节点(对某些条形图)和传入的关系到{{ 1}}。
解决方案是拆分FooParent
:
OPTIONAL MATCH
答案 1 :(得分:3)
在第二个图中,通过运行两个不同的可选匹配函数,以下查询将起作用
MATCH (foo:Foo { customId: '1' })
OPTIONAL
MATCH (foo)-[r]->(bar)
OPTIONAL
MATCH (fooParent:fooParent)-[fooParentRel]->(foo2)
RETURN foo, bar, foo2
干杯,
克里斯