首页 > 解决方案 > neo4j foreach 条件总是执行

问题描述

我有一个 if 语句的 foreach 条件。我只希望条件在$blobFile.extensionis not时运行null,但是我尝试了几种不同的方法,但这是唯一执行的方法。然而,这个查询似乎总是执行¯_(ツ)_/¯ 也许我是盲人,但任何帮助将不胜感激。

$blobFile.extension是字符串或空值。 image.url始终在图像节点中设置。

MERGE (species:Reference:Species{ GUID: $reference.guid })
WITH species
MERGE(image:Image:Media{GUID: $blobFile.imageGuid})
  ON CREATE SET
    image.GUID = apoc.create.uuid(),
    image.creationDate = datetime(),
    image.name = species.name
  ON MATCH SET
    image.name = species.name,
    image.oldFilename = image.filename
WITH species, image

FOREACH(ignoreme in CASE WHEN $blobFile.extension IS NOT NULL THEN [] ELSE [true] END
| SET image.filename = $blobFile.filename, image.url = 'https://www....' + image.GUID + '.' + $blobFile.extension)

标签: neo4jcyphergraph-databases

解决方案


您可以在没有 FOREACH 的情况下执行此操作,如下所示:

MERGE (species:Reference:Species{ GUID: $reference.guid })
MERGE (image:Image:Media{GUID: $blobFile.imageGuid})
ON CREATE SET
    image.GUID = apoc.create.uuid(),
    image.creationDate = datetime(),
    image.name = species.name
ON MATCH SET
    image.name = species.name
MERGE (species)<-[r6:IS_ABOUT]-(image)
WITH species, image WHERE $blobFile.extension IS NOT NULL
SET 
    image.filename = $blobFile.filename, 
    image.url = 'https://www....' + image.GUID + '.' + $blobFile.extension

推荐阅读