【问题标题】:How to make MATCH result mandatory with Cypher?如何使用 Cypher 强制 MATCH 结果?
【发布时间】:2016-04-20 14:05:30
【问题描述】:

我有一个像这样的密码:

CREATE

(a:LabelA {
    uid: "01"
})

WITH * MATCH
    (b:LabelB {uid: "02"})

MERGE (a)-[:RELATION]->(b)

如果我没有任何带有 uid "02" 的节点,我想得到一个错误。此密码通过,但未创建关系 (a)-[:RELATION]-(b)(因为节点“b”不存在)。

我该如何解决这个问题?

【问题讨论】:

  • b节点应该绝对存在吗?
  • @ChristopheWillemsen:是的,否则我想收到一个错误。
  • 收不到错误,但是节点不存在可以创建,是你想要的吗?
  • 不,我需要一个错误。

标签: neo4j cypher


【解决方案1】:

如果您直接在 neo4j 上执行此查询,那么您的场景不会出错。如果您通过某个应用程序通过 API 执行此查询,那么您可以编写功能以引发异常。

【讨论】:

    【解决方案2】:

    MATCH 模式不匹配任何内容并不是错误。

    如果您的代码由于某种原因需要出错,那么它应该只在查询响应指示没有uid 值为“02”的节点时生成错误。

    例如,假设您在查询中添加了适当的 RETURN 语句:

    MERGE  (a:LabelA {uid: "01"}) 
    WITH * 
    MATCH (b:LabelB {uid: "02"})
    MERGE (a)-[:RELATION]->(b) 
    RETURN b;
    

    然后,您的代码可以检查是否返回了任何数据行。如果没有返回任何行,则不存在具有uid 值“02”的节点。

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多