Neo4j 密码中删除的 If 语句

If statement for deleting in neo4j cypher

我试图仅基于包含相同值的两个节点执行分离删除,并且这两个节点接收参数化值。一旦这个条件成立,就应该 运行 附加条款。

我浏览了 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 语句下的代码应该只在条件满足时才执行。任何建议将不胜感激,

谢谢!

如果 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})
...

不清楚您查询的其余部分试图做什么,所以我不对此发表评论。