Neo4j多关系或多路径

目录

一、双向关系

1.创建2个节点间的双向关系

2.创建多个路径的节点,双向关系

3.查询带有方向性的关系

4.查询路径上的多个关系

5.查询出a到b的最短距离

6.查询特定长度的路径

二、将之前的关系清空下,如图所示,在操作一次

1.查询出a到b的最短距离

[​编辑 2.查询路径上的多个关系](#编辑 2.查询路径上的多个关系)

3.查询特定长度的路径


一、双向关系

1.创建2个节点间的双向关系

bash 复制代码
CREATE (a:Person {name: 'Alice'})-[r1:KNOWS]->(b:Person {name: 'Bob'})
CREATE (b)-[r2:KNOWS_BACK]->(a)
return r1,r2

2.创建多个路径的节点,双向关系

bash 复制代码
CREATE (a:xiyou {name: '唐僧'})-[r1:师父]->(b:xiyou {name: '孙悟空'})
CREATE (c:xiyou {name: '猪八戒'})-[r2:老家]->(d:xiyou {name: '高老庄'})
CREATE (e:xiyou {name: '老高'})-[r3:老爸]->(f:xiyou {name: '高圆圆'})
CREATE (b)-[r4:徒弟]->(a)
CREATE (a)-[r5:师父]->(c)
CREATE (a) <-[r6:徒弟]-(c)
CREATE (c) <-[r7:上门女婿]-(d)
CREATE (d)-[r8:出生地]->(e)
CREATE (d) <-[r9:村长]-(e)
CREATE (e) <-[r10:女儿]-(f)
return r1,r2,r3,r4,r5,r6,r7,r8,r9,r10

3.查询带有方向性的关系

查询带有方向性的关系时,你需要指定关系的方向。这可以通过在关系类型前加上 -><- 来实现

bash 复制代码
match(q:xiyou) -[r:师父]->(b:xiyou) return q,b
  • MATCH 关键字用于匹配模式。
  • (q:xiyou) -[r:师父]->(b:xiyou) 匹配所有从 xiyou类型的节点 r通过 师父 关系指向 xiyou类型的节点 b 的模式。
  • return q,b; 返回匹配到的节点 qb ,以及关系 r

4.查询路径上的多个关系

bash 复制代码
MATCH (a:xiyou)-[:村长*]->(b:xiyou)
WITH a, b,(a)-[:村长*]->(b) AS path
RETURN a, b, LENGTH(path) AS distance;
  • WITH 子句中,你需要明确地计算出从 ab 的路径(即 (a)-[:村长*]->(b))。
  • LENGTH(path) 现在作用于 path,计算的是该路径中的关系数。

解释:

  • (a)-[:村长*]->(b) 是路径表达式,表示从 ab 的路径,可以有多个 村长 关系。
  • LENGTH(path) 计算路径中的关系数量,作为节点之间的"距离"

LENGTH 应该作用于一个路径,而不是节点和关系的组合。你可以使用 MATCH 查找路径并在 RETURN 中计算该路径的长度。

换成如下写法:

MATCH (a:xiyou)-[:村长*]->(b:xiyou)

WITH a, b, relationships((a)-[:村长*]->(b)) AS path

RETURN a, b, LENGTH(path) AS distance

解释:

  1. 路径表示 :使用 relationships() 来获取从节点 ab 的所有关系,这样就能确保你得到了一个路径(path)。
  2. 计算路径长度LENGTH(path) 计算路径中的关系数量,也就是节点之间的"距离"。
  3. WITH 子句 :中间步骤使用 WITH 来传递变量 a, b 和路径 path,并计算出路径的长度 distance

但是报错,这里不适合用relationships()

如果不考虑所有的路径,而是想要获取最短路径的距离,你可以使用 shortestPath()

5.查询出a到b的最短距离

bash 复制代码
MATCH (a:xiyou)-[:村长*]->(b:xiyou)
with shortestpath((a)-[:村长*]->(b)) AS path
RETURN LENGTH(path) AS distance;

6.查询特定长度的路径

bash 复制代码
MATCH p = (a:xiyou)-[:村长*1..3]->(b:xiyou)
WHERE a.name = '老高'
RETURN p, LENGTH(p) AS length;
  • [:村长*1..3] 表示匹配长度为1到3的 KNOWS 关系链。
  • p = ... 将整个路径作为一个变量 p 返回。
  • LENGTH(p) 计算路径的长度。

二、将之前的关系清空下,如图所示,在操作一次

1.查询出a到b的最短距离

2.查询路径上的多个关系

3.查询特定长度的路径

或【1..4】

相关推荐
宁酱醇2 小时前
CSS基础_@拉钩教育【笔记】
前端·css
建群新人小猿2 小时前
CRMEB-PRO系统定时任务扩展开发指南
android·java·开发语言·前端
牧天白衣.2 小时前
vue 和 html 的区别
前端
知识分享小能手2 小时前
JavaScript学习教程,从入门到精通,Ajax数据交换格式与跨域处理(26)
xml·开发语言·前端·javascript·学习·ajax·css3
好名字08212 小时前
el-tabs与table样式冲突导致高度失效问题解决(vue2+elementui)
前端·vue.js·elementui
qq_278063712 小时前
vue elementui 去掉默认填充 密码input导致的默认填充
前端·vue.js·elementui
黄同学real2 小时前
HTML5 新增的主要标签整理
前端·html·html5
liwulin05062 小时前
【JAVAFX】实现屏幕指定区域截图,带尺寸显示
服务器·前端·python
沉迷...3 小时前
tsconfig.json和tsconfig.node.json和tsconfig.app.json有什么区别
前端·vue.js·node.js
哟哟耶耶3 小时前
react-11使用vscode开发react相关扩展插件(相关的快捷生成)
javascript·vscode·react.js