是否可以将文本文件中的属性与neo4j中的现有节点合并?我的文本文件采用id,property的形式。 id与我在neo4j中已有的节点相匹配。我试图将所有具有id的节点类型与文本文件的id匹配,并添加新属性。我现在尝试了这个,但它需要永远完成。此外,我可以在不仅仅是歌曲节点的所有节点上进行 - 我只是把它留作MATCH(c)吗?
USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///page_rank.txt' AS line
MATCH (c:Songs)
WHERE c.id=toInt(line[0])
SET c.pageRank = toFloat(line[1])
答案 0 :(得分:1)
是的,这是可能的。
假设我的数据库中有四个现有节点:
(a:Person {id: 01})
(b:Person {id: 02})
(c:Person {id: 03})
(d:Dog {id: 04})
让我们说我想合并一些属性 - 我不想创建新节点 - 只需将这些属性添加到现有节点即可。
所以我有一个名为' nodes_prop.csv'的CSV文件。看起来如下:
id,property
01,blue
02,green
03,grey
04,black
如果我想使用合并(听起来像你可能只是使用MATCH - SET用于你的用例)来匹配节点的id并设置属性(基于CSV文件中的值),无论节点的标签如何,我都可以使用以下密码查询:
LOAD CSV WITH HEADERS FROM "file:///nodes_prop.csv" AS line
MERGE (a {id: toInteger(line.id)})
ON MATCH SET a.eye_color=line.property
RETURN *;
答案 1 :(得分:0)
它可能的原因"永远完成"是因为:Song(id)
上没有an index,因此MATCH/WHERE
子句必须扫描Song
节点以查找每个id
。
您可以通过以下方式创建所需的索引:
CREATE INDEX ON :Song(id)
但是,如果您想要进行基本相同的查询,但对于所有节点(不仅仅是Song
个节点),您将无法使用" normal"索引,如上所述。相反,为了获得良好的性能,您需要使用explicit indexes,这需要您付出更多努力才能使用。