Neo4j 使用子解卷生成错误的节点和关系进行解卷

Neo4j 使用子解卷生成错误的节点和关系进行解卷,neo4j,cypher,Neo4j,Cypher,我希望这个查询将生成7个节点和21个关系 它生成13个节点和6个关系 WITH [{address: "1", connections: []}, {address: "2",connections: ["1"]}, {address: "3",connections: ["1", "2"]}, {address: "4",connections: ["1", "2", "3"]}, {address: "5",connections: ["1", "2", "3", "4"]}, {addre

我希望这个查询将生成7个节点和21个关系

它生成13个节点和6个关系

WITH [{address: "1", connections: []},
{address: "2",connections: ["1"]},
{address: "3",connections: ["1", "2"]},
{address: "4",connections: ["1", "2", "3"]},
{address: "5",connections: ["1", "2", "3", "4"]},
{address: "6",connections: ["1", "2", "3", "4", "5"]},
{address: "7",connections: ["1", "2", "3", "4", "5", "6"]}] AS seeds
UNWIND seeds AS seed
MERGE (source:Address { address: seed.address })

WITH seed.connections AS connections
UNWIND connections AS connection
MATCH (target:Address) WHERE target.address = connection

MERGE (source)-[:CONNECTS_TO]->(target)
我尝试了十几种变体,包括FOREACH


我是否错误地认为这是可能的?

这非常接近,我们需要纠正一件事,以使此查询按预期工作:源变量的范围。这在您的查询范围内超出了:

...
WITH seed.connections AS connections
...
source
未包含在WITH中,因此超出范围。合并最后一行中的
未绑定到任何先前的节点,因此如果某个节点和目标之间不存在此类模式,则将创建一个新的空白节点作为关系的起始节点

要解决此问题,我们需要在您的WITH中包含
源代码
,以使其保持在范围内:

...
WITH source, seed.connections AS connections
...

正如@InverseFalcon所描述的,最终的查询如下

WITH [{address: "1", connections: []},
{address: "2",connections: ["1"]},
{address: "3",connections: ["1", "2"]},
{address: "4",connections: ["1", "2", "3"]},
{address: "5",connections: ["1", "2", "3", "4"]},
{address: "6",connections: ["1", "2", "3", "4", "5"]},
{address: "7",connections: ["1", "2", "3", "4", "5", "6"]}] AS seeds
UNWIND seeds AS seed
MERGE (source:Address { address: seed.address })

WITH source, seed.connections AS connections
UNWIND connections AS connection
MATCH (target:Address) WHERE target.address = connection

MERGE (source)-[:CONNECTS_TO]->(target)

谢谢你的回答!将立即测试。100%完美。我试着传递其他东西,比如
seed.address
,但显然找不到魔力。非常感谢。