Neo4j快速上手(3)关系

关系

关系很重要,单独来讲

清空数据

为了测试,先把之前的数据全部清空

删除关系,并删除节点:

# 先删除所有关系
MATCH (n)-[r]-(m) DELETE r;
# 删除所有节点
MATCH (n) DELETE n;

创建三国人物节点

CREATE (n:Person{name:"刘备"});
CREATE (n:Person{name:"关羽"});
CREATE (n:Person{name:"张飞"});
CREATE (n:Person{name:"诸葛亮"});
CREATE (n:Person{name:"张苞"});

五个孤零零的节点:

创建关系

语法大致是(n和m是节点,r是关系):

(n)-[r]-(m)

创建关系:

# 匹配两个节点,并为两个节点创建关系,注意关系有方向
MATCH (p1:Person{name:"刘备"}) MATCH (p2:Person{name:"关羽"}) CREATE (p1)-[r:二弟]->(p2);
MATCH (p1:Person{name:"关羽"}) MATCH (p2:Person{name:"张飞"}) CREATE (p1)-[r:三弟]->(p2);
MATCH (p1:Person{name:"张飞"}) MATCH (p2:Person{name:"张苞"}) CREATE (p1)-[r:长子]->(p2);

再次查询所有节点MATCH (n) RETURN n;

查询关系

例如,我想查二弟这条关系 n 和 m 是节点,r是关系,“二弟”代表关系类型:

MATCH (n)-[r:二弟]->(m) RETURN n,r,m;

深度运算符

语法

# :TYPE 关系类型
# * 是什么,固定写法吗?
# minHops 最小步长
# .. 固定写法吗?
# maxHops 最大步长
-[:TYPE*minHops..maxHops]→

几个实例

# 表示路径长度为2,起始节点是a,终止节点是b
# 理论上来说有两个结果
# 刘备 - 张飞
# 关羽 - 张苞
# 执行下面的 CQL,在 Graph 能看到所有节点 刘备-关羽-张飞-张苞(除了诸葛亮)
# 在 Text 能看到两组查询结果(两组查询结果刚好包含了四个节点,除了诸葛亮)
# 也就是说 Graph 会显示所有的节点,并自动关联它们的关系
MATCH (a)<-[*2]-(b) RETURN a, b;
# 深度为3,只有刘备-张苞符合,但是这两个节点没有关联关系,只会显示两个独立节点
MATCH (a)<-[*3]-(b) RETURN a, b;

# 表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b
# 有三组符合
MATCH (a)-[*2..3]->(b) RETURN a, b;

# 表示路径长度的最大值是5,起始节点是a,终止节点是b;
# 任意两个节点都能匹配到
MATCH (a)-[*..5]->(b) RETURN a, b;

# 表示路径长度的最小值是3,起始节点是a,终止节点是b;
MATCH (a)-[*3..]->(b) RETURN a, b;

# 表示不限制路径长度,起始节点是a,终止节点是b;
MATCH (a)-[]->(b) RETURN a, b;
posted @ 2023-11-22 13:08  吴思老  阅读(41)  评论(0编辑  收藏  举报