Neo4j节点跳转疑问:能否跳过n2直接展示n1与n3的关联?
解决Neo4j中跳过中间节点展示关联的问题
嘿,这个问题我之前也碰到过,来给你拆解一下!
首先,你的需求完全可行,先说说为什么你原来的查询返回0条结果,大概率是这几个原因:
- 你是不是没给节点加标签?比如你的n1、n2、n3实际是带有特定标签的(比如
:Node1、:Node2、:Node3),但查询里只写了n1、n2、n3,Neo4j会默认匹配无标签节点,自然找不到对应的数据。试试给节点加上标签再查:MATCH (n1:Node1)--(n2:Node2)--(n3:Node3) RETURN n1, n3 - 或者你可以先跑个简单的查询验证节点关联是否存在:
看看能不能返回完整路径,这样就能确认n1、n2、n3之间的关联是不是真的存在。MATCH path = (n1)--(n2)--(n3) RETURN path
接下来,关于跳过n2直接展示n1和n3的关联,给你几个实用的方法:
方法1:修正原查询并去重
因为你有多个n2都关联同一个n3,直接用原查询会返回重复的n1-n3组合,加上DISTINCT就能得到唯一的配对:
MATCH (n1)--(n2)--(n3) RETURN DISTINCT n1, n3
方法2:用路径长度匹配
直接指定n1和n3之间的路径长度为2,不用显式写出中间节点n2,写法更简洁:
MATCH (n1)-[*2]-(n3) RETURN DISTINCT n1, n3
这里[*2]表示正好2步的关系,适合你的n1--n2--n3结构,不过要注意如果图里n1和n3还有其他2步路径的话,也会被匹配到,根据你的图结构来选择就行。
方法3:用匿名节点代替n2
如果不想写n2这个变量,可以用匿名节点()来代替,效果和原查询一样,但看起来更清爽:
MATCH (n1)--()--(n3) RETURN DISTINCT n1, n3
只要先解决了原查询返回0的问题,用上面任意一种方法都能实现你想要的跳过中间节点展示n1和n3关联的效果~
内容的提问来源于stack exchange,提问作者RickenbackerMan
相关产品推荐
相关产品推荐

