我有一个这样的密码:
CREATE (a:LabelA { uid: "01" }) WITH * MATCH (b:LabelB {uid: "02"}) MERGE (a)-[:RELATION]->(b)
如果我没有uid为"02"的任何节点,我希望得到一个错误。这个密码通过了,但是关系(a)-[:RELATION]-(b)没有被创建(因为节点'b'不存在)。我该如何解决这个问题?
"02"
(a)-[:RELATION]-(b)
fxnxkyjh1#
如果你直接在neo4j上执行这个查询,那么Ter是不会在你的场景中出错的。如果您通过某个应用程序通过API执行此查询,那么您可以编写抛出异常的功能。
doinxwow2#
MATCH模式不匹配任何东西并不是错误。如果您的代码出于某种原因需要一个错误,那么当查询响应指示没有uid值为“02”的节点时,它应该只生成一个错误。例如,假设您在查询中添加了一个适当的RETURN语句:
MATCH
uid
RETURN
MERGE (a:LabelA {uid: "01"}) WITH * MATCH (b:LabelB {uid: "02"}) MERGE (a)-[:RELATION]->(b) RETURN b;
然后,您的代码可以检查是否返回任何数据行。如果没有返回行,则不存在uid值为“02”的节点。
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])
3条答案
按热度按时间fxnxkyjh1#
如果你直接在neo4j上执行这个查询,那么Ter是不会在你的场景中出错的。如果您通过某个应用程序通过API执行此查询,那么您可以编写抛出异常的功能。
doinxwow2#
MATCH
模式不匹配任何东西并不是错误。如果您的代码出于某种原因需要一个错误,那么当查询响应指示没有
uid
值为“02”的节点时,它应该只生成一个错误。例如,假设您在查询中添加了一个适当的
RETURN
语句:然后,您的代码可以检查是否返回任何数据行。如果没有返回行,则不存在
uid
值为“02”的节点。dwbf0jvd3#
我想这样的东西会起作用: