neo4j对缺少的匹配进行查询失败,而不是返回空数组

Ter*_*how 6 neo4j cypher

给出下面的密码查询

  MATCH (u:User {id: {userId}}), (b:B {id: {bId})
  CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c)
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在创建一个C必须与2个事物,某个节点b和某个用户建立关系的节点.

当u或b不存在时,我会得到一个空数组,但我希望neo4j以失败而不是空数组作为响应.这使我更容易知道缺少哪个节点.当匹配条款没有返回任何内容时,是否可以"强制"失败?

Tom*_*nič 7

这就是它的工作原理,如果MATCH返回null则查询失败.这就是为什么它们OPTIONAL MATCH可用,以便在返回null时不会失败.

编辑:像这样在最后添加return

MATCH (u:User {id: {userId}}), (b:B {id: {bId})
CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c)
RETURN 'success'
Run Code Online (Sandbox Code Playgroud)

因此,如果你获得成功,那意味着匹配找到它正在寻找的东西,如果没有,那么它没有

编辑2:

OPTIONAL MATCH (u:User {id: {userId}}), (b:B {id: {bId})
with *,CASE when u is not null and b is not null then [1] else [] end as exists
FOREACH (x in exists | CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c))

RETURN u,b
Run Code Online (Sandbox Code Playgroud)

所以现在我们做一个可选的匹配,所以当找不到时它不会分解.然后我们做一个CASE语句,用户和B都存在,我们创建一些关系.最后,我们返回User和b并检查它们是否存在或者是否存在任何空值.