【发布时间】:2019-08-08 04:32:29
【问题描述】:
我试图仅基于包含相同值的两个节点执行分离删除,并且这两个节点接收参数化值。一旦这个条件为真,它应该运行附加子句。
我浏览了 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 语句下的代码应仅在满足条件后执行。任何建议将不胜感激,
谢谢!
【问题讨论】:
标签: neo4j cypher graph-databases