我正在尝试找出将新创建的节点附加到可能存在或可能不存在的其他节点的正确方法。基本上,CREATE A和B存在,LINK B到A和RETURN A.如果B不存在,只返回A。
这是我的Cypher查询(额外的WITH子句是因为这是一个更大的查询的一部分,我正在尝试确保此示例代码以相同的方式工作):
CREATE (a:A { foo: "bar" })
WITH a
OPTIONAL MATCH (b:B)
WHERE a.foo = b.foo
CREATE UNIQUE b-[:LINK]->a
WITH a
RETURN a
这不起作用,因为CREATE UNIQUE失败,因为b为NULL。除了将其分解为多个查询之外,有没有办法实现这一目标?
答案 0 :(得分:2)
我认为你需要用foreach来破解它......
CREATE (a:A { foo: "bar" })
WITH a
OPTIONAL MATCH (b:B)
WHERE a.foo = b.foo
WITH a, collect(b) as bs
FOREACH(b in bs | CREATE UNIQUE b-[:LINK]->a)
WITH a
RETURN a