Neo4j 使用子解卷生成错误的节点和关系进行解卷
我希望这个查询将生成7个节点和21个关系 它生成13个节点和6个关系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
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
,但显然找不到魔力。非常感谢。