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)
要将 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)