我试图仅基于包含相同值的两个节点执行分离删除,并且这两个节点接收参数化的值。此条件成立后,应运行其他子句。
我浏览了Neo4j社区页面,并尝试了FOREACH方法(https://community.neo4j.com/t/how-to-check-if-else-in-query/1533)。但是,从我的研究来看,您似乎只限于只写子句。下面的代码说明了我要实现的目标,我只想在两个用户节点相同的情况下执行删除操作。我还尝试了可选匹配,例如
OPTIONAL MATCH (user: User)-[:CREATED]->(moment:Moment{GUID: $guid }) WHERE user.GUID = $userId
但是,我最终还是以某种方式删除了一系列节点,并最终撤消了更改。
MATCH (user: User)-[:CREATED]->(moment:Moment{GUID: $guid })
MATCH (authUser: User{ GUID: $userId })
IF user.GUID == authUser.GUID:
OPTIONAL MATCH (image:Image)-[:IS_ABOUT]->(moment)
WITH image, moment, moment.GUID AS momentGuid, image.url AS url, image.GUID AS guid, image.filename AS filename
DETACH DELETE moment, image
RETURN COLLECT({
moment: momentGuid,
url: url,
guid: guid,
filename: filename
}) AS data
理想情况下,仅在满足条件后才执行if语句下的代码。任何建议将不胜感激,
谢谢!
答案 0 :(得分:1)
如果MATCH
子句及其WHERE
子句(如果有)不匹配,则整个查询将中止。
因此,您可以替换为:
MATCH (user: User)-[:CREATED]->(moment:Moment{GUID: $guid })
MATCH (authUser: User{ GUID: $userId })
IF user.GUID == authUser.GUID:
...
带有以下(简化的)代码段:
MATCH
(user:User {GUID: $userId})-[:CREATED]->(moment:Moment {GUID: $guid}),
(authUser:User {GUID: $userId})
...
尚不清楚您的其余查询正在尝试做什么,所以我没有对此发表评论。