Arrays neo4j删除我的阵列数据

Arrays neo4j删除我的阵列数据,arrays,neo4j,Arrays,Neo4j,.嗨,我正在将数据导入Neo4j图形中 我已经导入了“主题”,其中一些主题将.alias设置为数组,有些则没有 LOAD CSV WITH HEADERS FROM "file:///home/michael/db/Aliases.csv" AS r MATCH (t:Topic { mysql_id: toInt(r.id)}) SET t.aliases = [] + t.aliases + split(r.aliases, ';') + r.alias; // Where t.aliase

.嗨,我正在将数据导入Neo4j图形中

我已经导入了“主题”,其中一些主题将.alias设置为数组,有些则没有

LOAD CSV WITH HEADERS FROM "file:///home/michael/db/Aliases.csv" AS r
MATCH (t:Topic { mysql_id: toInt(r.id)})
SET t.aliases = [] + t.aliases + split(r.aliases, ';') + r.alias;
// Where t.aliases, r.aliases, or r.alias can be null.
// If any are null then the result is null, erasing the other data.
问题是向数组中添加任何null都会杀死该数组。这种行为的用例显然是。。。嗯,零。但不管怎样

如何将可能为空的值附加到Cypher中的数组

谢谢

迈克

更新:我通过使用三个查询进行了变通:

  • 创建主题并
    设置t.alias=[]+r.alias
    ,该选项可能为空
  • 使用r.alias更新主题,其中没有(t.alias)
  • 使用r.alias更新主题,其中有(t.alias)
  • 这似乎是额外的工作。

    您的“空”别名在哪里?在您的数据中看不到它

    你可以用滤纸把它们过滤掉

    LOAD CSV WITH HEADERS FROM "file:///home/michael/db/Aliases.csv" AS r
    with r, filter(x in split(r.aliases, ';') WHERE not x is null) as aliases
    MATCH (t:Topic { mysql_id: toInt(r.id)})
    SET t.aliases2 = t.aliases + aliases, 
        t.aliases3 = + aliases;
    

    下面是我在这上面发现的:

    可以使用coalesce处理空值:

    LOAD CSV WITH HEADERS FROM "file:///home/michael/db/Aliases.csv" AS r
    MATCH (t:Topic { mysql_id: toInt(r.id)})
    SET t.aliases = coalesce(t.aliases,[]) + split(coalesce(r.aliases,''), ';') + coalesce(r.alias,[]);
    

    嗨,对不起,不清楚
    t.alias
    r.alias
    r.alias
    可以为空。我更新了示例代码以更好地显示。