我正在尝试执行以下密码代码:
// Nodes created for Lessons, Submitter, Center and Topic
// Relations created
// Uniqueness constraints.
CREATE CONSTRAINT ON (l:Lesson) ASSERT l.name IS UNIQUE;
// Load.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///llis.csv' AS line
WITH line, SPLIT(line.LessonDate, '-') AS date
CREATE (lesson:Lesson { name: TOINT(line.`LessonId`) } )
SET lesson.year = TOINT(date[0]),
lesson.month = TOINT(date[1]),
lesson.day = TOINT(date[2]),
lesson.title = (line.Title),
lesson.abstract = (line.Abstract),
lesson.lesson = (line.Lesson),
lesson.org = (line.MissionDirectorate),
lesson.safety = (line.SafetyIssue),
lesson.url = (line.url)但是,我不能在浏览器中这样做,因为它是两个单独的行。请参见错误:
标签为Lesson且属性为name =0的节点(562)已存在
我知道我注定要在Neo4j-shell中做到这一点。我已经设法进入Neo4j-shell,但是我如何在那里运行这段代码呢?
发布于 2017-11-17 21:00:15
将您的语法放在一个文件中,然后按如下方式运行它:
在Windows上
type yourfile.cypher | bin\cypher-shell.bat -u <user> -p <password>在Linux上
cat yourfile.cypher | bin/cypher-shell -u <user> -p <password>希望这能帮上忙,汤姆
发布于 2017-11-21 05:31:40
您的CSV数据可能有多个具有相同LessionId值的行。如果是这样,那么每次CREATE子句尝试使用现有的Lesson创建第二个name节点时,都会导致违反name上的唯一性约束。
以下版本的LOAD CSV查询使用MERGE而不是CREATE,以避免重复Lesson节点:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///llis.csv' AS line
WITH line, SPLIT(line.LessonDate, '-') AS date
MERGE (lesson:Lesson { name: TOINT(line.LessonId) } )
ON CREATE SET
lesson.year = TOINT(date[0]),
lesson.month = TOINT(date[1]),
lesson.day = TOINT(date[2]),
lesson.title = (line.Title),
lesson.abstract = (line.Abstract),
lesson.lesson = (line.Lesson),
lesson.org = (line.MissionDirectorate),
lesson.safety = (line.SafetyIssue),
lesson.url = (line.url);如果MERGE实际创建了一个节点,则上面的查询还使用ON CREATE来仅执行SET操作。这实际上会导致查询忽略CSV文件中重复以前看到的LessonId的所有行。如果由于某些原因,您确实希望设置始终发生(即使对于具有重复LessonId值的行),您可以省略ON CREATE。
https://stackoverflow.com/questions/47349377
复制相似问题