【问题标题】:Neo4j Cypher - adding a property with LOAD CSVNeo4j Cypher - 使用 LOAD CSV 添加属性
【发布时间】:2017-02-08 12:54:12
【问题描述】:

我有一组使用 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”,但在该列中它是“nodeId”,并且两者'prop2' 和 'prop3' 等于 1'。

注意:file_A 大约有 400.000 行,file_B 大约有 1.300.000 行。

谢谢。

【问题讨论】:

    标签: properties neo4j cypher load-csv


    【解决方案1】:

    您可能需要确保您没有将整数与字符串进行比较。这通常可能是此类不匹配的根源。

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

    【讨论】:

    • 您好,感谢您的回答。值都是字符串。并且没有尾随或前面的空格。事实上,如果我手动删除 file_B 的所有行,除了其中不匹配的行,那么如果我执行 de cypher 查询(第二个),它就会匹配。
    • 如果我剪切其中一个不匹配的行并将其粘贴为file_B上行的第一个位置,它也匹配。奇怪的行为...
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多