Neo4j:使用 WITH 语句的错误结果

Neo4j: bad result using the WITH statement

要将 json 导入 Neo4J,我使用了这两个请求:

请求 1:

CALL apoc.load.json("file:///files.json") yield value
unwind value.nodes as node
merge (file:File {id:node.path}) ON CREATE SET file.name = node.name

请求 2:

CALL apoc.load.json("file:///files.json") yield value
unwind value.edges as edge
MATCH
    (source:File {id: edge.sourceId}),
    (target:File {id: edge.targetId})
CREATE (source)-[:`R`]->(target)

结果是正确的(254 个节点和 3578 个关系)。

现在我想将这两个查询合并为一个,所以我使用 WITH 语句如下:

CALL apoc.load.json("file:///files.json") yield value
unwind value.nodes as node
merge (file:File {id:node.path}) ON CREATE SET file.name = node.name
WITH value
unwind value.edges as edge
MATCH
    (source:File {id: edge.sourceId}),
    (target:File {id: edge.targetId})
CREATE (source)-[:`R`]->(target)

我得到了正确数量的节点,但不是正确数量的边(254 个节点和 908812 个关系)。 知道这里发生了什么吗?

我不明白这个问题,但通过替换关系的 MATCH / CREATE 部分找到了解决方案。

有效请求:

CALL apoc.load.json("file:///files.json") yield value
unwind value.nodes as node
merge (file:File {id:node.path}) ON CREATE SET file.name = node.name
WITH value
unwind value.edges as edge
MATCH (source:File {id: edge.sourceId}), (target:File {id: edge.targetId})
MERGE (source)-[:`R`]->(target)