给出下面的密码查询
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以失败而不是空数组作为响应.这使我更容易知道缺少哪个节点.当匹配条款没有返回任何内容时,是否可以"强制"失败?
这就是它的工作原理,如果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并检查它们是否存在或者是否存在任何空值.
归档时间: |
|
查看次数: |
845 次 |
最近记录: |