在下面的例子中,我创建了两个顶点之间的单向关系(从b到a),有没有一种方法可以同时创建从(a到b)的关系?
SELECT *
FROM cypher('test_graph', $$
MATCH (a:Person), (b:Person) WHERE a.name = 'hossam' AND b.name = 'omar'
CREATE (b)-[r:REL {name: b.name+'->'+a.name}]->(a) RETURN r
$$) as (v agtype);
我尝试删除箭头符号**〉***********,如:CREATE (b)-[r:REL {name: b.name+'->'+a.name}]-(a)
,但它会导致语法错误。
3条答案
按热度按时间kb5ga3dv1#
到目前为止,我认为实现双向关系最直接的方法是将其设置为属性,你不能在创建时删除方向。例如:
这将返回你说的错误
如果你使用双向边缘
你需要尝试这样的东西:
通过将““指定<->为属性,您可以使用以下命令搜索图形中的所有双向关系:
由于双向关系的特性还不被支持,我相信这是解决这个问题的一种方法。
qncylg1j2#
不可以,在Apache AGE中无法创建双向关系。在Neo4j中也没有办法创建双向关系,正如this question的答案中所写的那样。原因是,既然允许您进行非定向查询,双向关系就变得本质上与完全忽略方向相同。
在技术层面上:
边与顶点start_id和end_id一起存储在边表中。具有双向关系意味着start_id和end_id都需要具有2个值。
你有两个选择:
1.)在相反的方向建立另一个关系(但它需要更多的空间)。
2.)进行非定向查询。
rt4zxlrg3#
一次创建两个关系:
AGE确保您的图形在边方面具有双向关系。
尝试以下查询进行检查:
退货:
相反关系匹配的查询
退货:
但是,如果你需要的关系是
hossam->omar
的形式。您需要定义另一个关系,最好是从(a)-[r]->(b)
开始。它将显示为另一个边缘。或,
一个更好的方法是将关系隐含为以下
b.name+'<->'+a.name