我无法弄清楚如何在Neo4j中创建CSV表格中的链接。我已经阅读了本手册的几个部分(match,loadCSV等),free book以及我发现的几个教程。他们似乎都没有考虑我的用例(这很奇怪,因为我认为这是一个非常简单的用例)。我已经尝试过以各种方式调整他们的代码,但似乎没有任何工作。
所以,我有三个CSV表:母公司,子公司和父子对。我首先加载前两个表(并且工作正常 - 所有属性都在那里,所有信息都是正确的):
LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/children.csv" AS node
CREATE (:Children {id: node[0], name: node[1]})
LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/parents.csv" AS node
CREATE (:Parent {id: node[0], name: node[1]})
现在,这是第三个表的结构:
child_id,parent_id
以下是我尝试过的一些事情:
LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (FROM {Parent: rels[1]}), (TO {Children: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)
这不会给我一个错误,但它会返回零行。
LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (FROM {id: rels[1]}), (TO {id: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)
这不会给我一个错误,但它只返回一堆空节点。因此,它创建链接,但不知何故它不链接实际节点。
LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (FROM {Parent.id: rels[1]}), (TO {Children.id: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)
这给了我一个语法错误(Neo.ClientError.Statement.InvalidSyntax
)
我还尝试了上面代码块的几种变体,但无济于事。那么,我做错了什么? (我在Neo4j 2.1.6上,如果重要的话。)
答案 0 :(得分:2)
在您的cypher语句中,您没有引用 MATCH 中用于创建关系的相同标识符,因此他只会创建新的空节点:
看看区别:
MATCH( FROM {id:rels [1]}),( TO {id:rels [0]})
创建(父) - [:OWNS] - >(儿童)
相反它应该是:
LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (Parent {id: rels[1]}), (Children {id: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)