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

6

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

owner,friend,type
Bob,Charlie,friend
Alice,Chris,follower

在上面的例子中,Charlie是Bob的朋友,Chris是Alice的关注者。我想使用“LOAD CSV”将它们批量导入neo4j,但我在导入期间创建有条件的关系时遇到了问题。导入代码大致如下:
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);

我更倾向于有两种关系类型,即IS_FRIENDFOLLOWS。但是当我尝试使用条件语句时,比如:

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

我在使用CASE语句时出现了语法错误。

有没有办法在从CSV文件进行批量导入时实现条件关联呢?

2个回答

0

0
如果您可以访问 APOC Procedures,您可以使用 条件性过程 来处理此情况,它比 FOREACH 技巧更易读。
MERGE (o:Person { name: owner })
MERGE (c:Person { name: friend })
WITH o, c, Type
CALL apoc.do.when(Type = 'friend', "MERGE (o)<-[r:IS_FRIEND]-(c) RETURN r", "MERGE (o)<-[r:FOLLOWS]-(c) RETURN r", {o:o, c:c}) YIELD value
SET value.r.type = Type

最后的SET语句主要是因为您无法以调用的存储过程结束查询,所以我们需要进行某种形式的SET操作。随意替换为适合您数据的任何其他内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接