You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Cypher在Memgraph中正确创建双向关系?

在Memgraph中用Cypher创建双向关系的正确方法

你尝试的几种创建方式都存在问题,对应的错误原因和正确实现方式如下:

你遇到的错误场景

场景1:使用双向箭头创建关系

执行查询:

CREATE (p1:Person {name: 'Harry'}), (p2:Person {name: 'Anna'})
CREATE (p1)<-[r1:MARRIED_TO]->(p2)
RETURN r1;

得到错误:Bidirectional relationship are not supported when creating an edge
原因:Memgraph不支持在CREATE语句中使用双向箭头语法,关系创建必须明确方向。

场景2:使用无方向语法创建关系

执行查询:

CREATE (p1:Person {name: 'Harry'}), (p2:Person {name: 'Anna'})
CREATE (p1)-[r:MARRIED_TO]-(p2)
RETURN r;

得到相同错误,原因同上:CREATE时必须指定关系的方向,无方向语法仅适用于MATCH查询。

场景3:重复声明变量

执行查询:

CREATE (p1:Person {name: 'Harry'}), (p2:Person  {name: 'Anna'})
CREATE (p1)-[r:MARRIED_TO]->(p2)
CREATE (p1)<-[r:MARRIED_TO]-(p2)
RETURN r;

得到错误:Redeclaring variable: r.
原因:同一个查询中变量r被重复使用,每个关系变量需要唯一命名。

正确的实现方式

Memgraph的底层关系是有向的,要实现"双向关系"的效果,需要创建两条方向相反的同类型关系,具体写法如下:

方式1:使用不同变量创建两条关系

CREATE (p1:Person {name: 'Harry'}), (p2:Person {name: 'Anna'})
CREATE (p1)-[r1:MARRIED_TO]->(p2), (p2)-[r2:MARRIED_TO]->(p1)
RETURN r1, r2;

方式2:不使用变量直接创建

如果不需要返回关系,可以省略变量名:

CREATE (p1:Person {name: 'Harry'}), (p2:Person {name: 'Anna'})
CREATE (p1)-[:MARRIED_TO]->(p2), (p2)-[:MARRIED_TO]->(p1);

查询双向关系的技巧

后续查询时,无需区分方向,可以用无方向的匹配语法,自动匹配任意方向的关系:

MATCH (a:Person)-[:MARRIED_TO]-(b)
WHERE a.name = 'Harry'
RETURN b;

内容的提问来源于stack exchange,提问作者TenTonBonton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:42:15