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
值的行),您可以在创建时忽略