在 neo4j 中使用 LOAD CSV 创建条件关系

cwh*_*and 6 neo4j

我的任务是将一些朋友或关注关系导入到一个简单的 Neo4j 图数据库中。我的输入数据是具有以下结构的 csv:

owner,friend,type
Bob,Charlie,friend
Alice,Chris,follower
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,查理是鲍勃的朋友,克里斯是爱丽丝的追随者。我想使用将这些批量导入到 neo4j 中,LOAD CSV但在导入过程中创建条件关系时遇到问题。导入代码类似于:

LOAD CSV WITH HEADERS FROM "file:./graph.csv" AS csvLine
WITH csvLine.owner AS owner,
     csvLine.friend AS friend,
     csvLine.type AS Type

MERGE (o:Person { name: owner })
MERGE (c:Person { name: friend })
MERGE (u)<-[:IS_FRIEND {type: Type}]-(c);
Run Code Online (Sandbox Code Playgroud)

我宁愿有两种类型的关系IS_FRIENDFOLLOWS。但是当我尝试像这样的条件语句时:

CASE WHEN Type == "friend" THEN MERGE (u)<-[:IS_FRIEND]-(c) ELSE (u)<-[:FOLLOWS]-(c);
Run Code Online (Sandbox Code Playgroud)

我收到有关使用的语法错误 CASE

有没有办法在像这样从 csv 批量导入期间建立条件关系?

Nam*_*ata 0

奇怪的是,这个问题没有得到答复。你可以看看https://markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/

// cards
FOREACH(n IN (CASE WHEN csvLine.type IN ["yellow", "red", "yellowred"] THEN [1] else [] END) |
  FOREACH(t IN CASE WHEN team = home THEN [home] ELSE [away] END |
    MERGE (stats)-[:RECEIVED_CARD]->(card {time: csvLine.time, type: csvLine.type})
  )     
)
Run Code Online (Sandbox Code Playgroud)