我相信,到今天为止,使用 Apache AGE 执行此操作的唯一方法是使用类似于此无向的属性设置边缘或将其设置为双向。
考虑到这一点,以下两个示例均无效:
-- EXAMPLE 1 : UNDIRECTED EDGE (DOES NOT WORK)
SELECT * FROM cypher ('demo', $$
MATCH (a:Country), (b:Country)
WHERE a.name = "India" AND b.name = "Bangladesh"
CREATE (a)-[e:BORDERS_WITH]-(b)
RETURN e
$$) as (e agtype);
ERROR: only directed relationships are allowed in CREATE
LINE 4: CREATE (a)-[e:BORDERS_WITH]-(b)
-- EXAMPLE 2 : BIDIRECTIONAL EDGE (DOES NOT WORK)
SELECT * FROM cypher ('demo', $$
MATCH (a:Country), (b:Country)
WHERE a.name = "India" AND b.name = "Bangladesh"
CREATE (a)<-[e:BORDERS_WITH]->(b)
RETURN e
$$) as (e agtype);
ERROR: syntax error at or near ">"
LINE 4: CREATE (a)<-[e:BORDERS_WITH]->(b)
但这有效:
-- EXAMPLE 3 : SET BIDIRECTIONAL EDGE AS PROPERTY (WORKS)
SELECT * FROM cypher ('demo', $$
MATCH (a:Country), (b:Country)
WHERE a.name = "India" AND b.name = "Bangladesh"
CREATE (a)-[e:BORDERS_WITH{ type:"<->" }]->(b)
RETURN e
$$) as (e agtype);
e
--------------------------------------------------------------------------------------------------------------------------------------------------
{"id": 2533274790395905, "label": "BORDERS_WITH", "end_id": 2251799813685249, "start_id": 2251799813685250, "properties": {"type": "<->"}}::edge
(1 row)
demo=#
然后,如果您想查找哪些边是“<->”类型,您只需键入以下查询:
SELECT * FROM cypher ('demo', $$
MATCH (a)-[e:BORDERS_WITH]->(b)
WHERE e.type = "<->"
RETURN e
$$) as (e agtype);
e
--------------------------------------------------------------------------------------------------------------------------------------------------
{"id": 2533274790395905, "label": "BORDERS_WITH", "end_id": 2251799813685249, "start_id": 2251799813685250, "properties": {"type": "<->"}}::edge
(1 row)