我试图根据我的可选匹配中的关系来查看是否存在节点:Customer。然后,如果客户有订单,我想与他们建立一些关系。我不确定什么是正确的语法。
MERGE (o:Order {account: 'j593jfsh', id: '35353'})
OPTIONAL MATCH (c:Customer)-[:HAS_ORDER]->(o)
MERGE (c)-[:HAS_SESSION]->(s)
MERGE (c)-[:HAS_ORDER]->(o)
WHERE c IS NOT NULL"
答案 0 :(得分:2)
执行此操作的一种方法是使用pattern comprehension代替“可选匹配”。这会将所有拥有订单的客户收集到一个列表中,然后您可以使用FOREACH合并关系。如果没有客户,则该列表将为空,并且FOREACH将无任何处理。
...
MERGE (o:Order {account: 'j593jfsh', id: '35353'})
WITH o, s, [(c:Customer)-[:HAS_ORDER]->(o) | c] as customers
FOREACH (c in customers |
MERGE (c)-[:HAS_SESSION]->(s)
MERGE (c)-[:HAS_ORDER]->(o)
)
...