【问题标题】:Cyper Merge on Optional Match可选匹配上的密码合并
【发布时间】:2019-02-14 20:25:57
【问题描述】:

我正在尝试根据我的可选匹配中的关系查看 node :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"

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您可以这样做的一种方法是使用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)
    )
    ...
    

    【讨论】:

    • 完美运行。谢谢
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多