Neo4j中的多行执行
我正在尝试执行以下密码:Neo4j中的多行执行,neo4j,cypher,Neo4j,Cypher,我正在尝试执行以下密码: // 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.c
// 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)
但是,我无法在浏览器中执行此操作,因为它是两条独立的行。请参阅错误:
节点(562)已存在,标签为课程
且属性为名称
=0
我知道我注定要在Neo4j外壳中完成这项工作。我已经设法进入了Neo4j shell,但是如何在那里运行这段代码?将您的语法放在一个文件中,然后按如下方式运行它: 在窗户上
type yourfile.cypher | bin\cypher-shell.bat -u <user> -p <password>
键入yourfile.cypher | bin\cypher-shell.bat-u-p
在Linux上
cat yourfile.cypher | bin/cypher-shell -u <user> -p <password>
cat yourfile.cypher | bin/cypher shell-u-p
希望这有帮助,
Tom您的CSV数据可能有多行具有相同的
LessionId
值。若是这样,那个么每当您的CREATE
子句尝试使用现有的名称创建第二个Lesson
节点时,就会导致对课程(名称)
的唯一性约束冲突
以下版本的加载CSV
查询使用合并
而不是创建
,以避免重复课程
节点:
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);
如果合并
实际创建了一个节点,则上述查询还使用创建时的仅执行设置
操作。这实际上会导致查询忽略CSV文件中重复先前看到的LessonId
的所有行。如果出于某种原因,您确实希望设置总是发生(即使对于具有重复的LessonId
值的行),您可以在创建时忽略