neo4j 如何使用Cypher使MATCH结果成为强制性的?

s1ag04yj  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(98)

我有一个这样的密码:

CREATE

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

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

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

如果我没有uid为"02"的任何节点,我希望得到一个错误。这个密码通过了,但是关系(a)-[:RELATION]-(b)没有被创建(因为节点'b'不存在)。
我该如何解决这个问题?

fxnxkyjh

fxnxkyjh1#

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

doinxwow

doinxwow2#

MATCH模式不匹配任何东西并不是错误。
如果您的代码出于某种原因需要一个错误,那么当查询响应指示没有uid值为“02”的节点时,它应该只生成一个错误。
例如,假设您在查询中添加了一个适当的RETURN语句:

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

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

dwbf0jvd

dwbf0jvd3#

我想这样的东西会起作用:

OPTIONAL MATCH (b: LabelB {uid: "02"}) 
WITH b, CASE WHEN b IS NULL THEN TRUE ELSE FALSE END AS nodeNotFound 
CALL apoc.util.validate(nodeNotFound,'Node with given property and label not found!', [404])

相关问题