Neo4j Cypher - 使用LOAD CSV添加属性

时间:2017-02-08 12:54:12

标签: properties neo4j cypher load-csv

我有一组使用 file_A 创建的节点,其中包含每个节点的“id”列。它是使用此Cypher查询(在Java中)创建的:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:file_A' AS line FIELDTERMINATOR '\t'
CREATE (c:Node {nodeId:line.id})

现在我有另一个文件( file_B ),其中包含四列:id,description,prop2和prop3。我需要为之前创建的每个节点分配一个描述(属性'nodeDesc')。这些说明将从 file_B 的“说明”列中读取。此外,要将此值分配给节点的'nodoDesc'属性,'prop2'和'prop3'都必须等于'1'。为此,我使用此Cypher查询:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:file_B' AS line FIELDTERMINATOR '\t'
MATCH (c:Node)
WHERE c.nodeId=line.id AND line.prop2='1' AND line.prop3='1'
SET c.nodeDesc = line.description

file_B 包含每个节点的一些描述,但只有一个节点的'prop2'和'prop3'都等于'1'。这就是我想要分配给节点属性的那个。

执行上一个查询后我得到的问题是某些节点没有描述。在执行了多次测试之后,我已经验证它没有使用 file_B 的列'id'来执行'nodeId'的MATCH,但是在该列中它是'nodeId',并且两者都是'prop2'和'prop3'等于1'。

注意: file_A 有400.000行aprox。, file_B 有1.300.000行aprox。

感谢。

1 个答案:

答案 0 :(得分:0)

您可能希望确保不将整数与字符串进行比较。这通常可能是这些不匹配的根源。

如果两个值都是字符串,那么您可能需要检查一个字符串或另一个字符串是否有尾随(或前面)空格。