一个 Cypher 查询中的多个 LOAD CSV 语句

Multiple LOAD CSV statements in one Cypher query

尝试在一个密码查询中从不同的 .csv 文件导入行并创建节点:

// User nodes
LOAD CSV WITH HEADERS
FROM 'file:///profile.csv' AS profile_line
CREATE (user:User { userId: profile_line.User })

// Project nodes
LOAD CSV WITH HEADERS
FROM 'file:///project.csv' AS project_line
CREATE (project:Project { projectId: project_line.projectId })

// Image nodes
LOAD CSV WITH HEADERS
FROM 'file:///media.csv' AS image_line
CREATE (image:Image { imageId: '<imageId>' })

抛出以下错误:

"WITH is required between CREATE and LOAD CSV (line 9, column 1 (offset: 211)) "CREATE (project:Project { projectId: project_line.projectId })"

我不清楚应该如何构造 WITH 语句。

如果您使用的是 Neo4j 浏览器,最简单的方法是用分号分隔您的语句并打开 'multi-statement query editor'(这也会在每个语句中为您提供一个不错的小进度指示器是 运行):

LOAD CSV WITH HEADERS
FROM 'file:///profile.csv' as profile_line
CREATE (user: User { userId: profile_line.User });

LOAD CSV WITH HEADERS
FROM 'file:///project.csv' as project_line
CREATE (project: Project { projectId: project_line.projectId });

LOAD CSV WITH HEADERS
FROM 'file:///media.csv' as image_line
CREATE (image: Image { imageId: image_line.ImageId });

不然的话,这还是可以的。我们想要的是一个 WITH 语句,它将 return 一行,而不管之前的 CREATE 最终创建了多少个节点,因此任何聚合函数都可以。例如:

LOAD CSV WITH HEADERS
FROM 'file:///profile.csv' as profile_line
CREATE (user: User { userId: profile_line.User })

WITH max(1) as dummy
LOAD CSV WITH HEADERS
FROM 'file:///project.csv' as project_line
CREATE (project: Project { projectId: project_line.projectId })

WITH max(1) as dummy
LOAD CSV WITH HEADERS
FROM 'file:///media.csv' as image_line
CREATE (image: Image { imageId: image_line.ImageId })
Added 9 labels, created 9 nodes, set 9 properties, completed after 17 ms.

虽然我认为这对未来的你来说超级不清楚,我不推荐它。