cypher实践之获取路径中name属性最短的那个节点
来源:互联网 发布:看图软件apk 编辑:程序博客网 时间:2024/05/21 03:19
首先 获取一个路径p。那么很容易写出:
match (n:mechword{name:'生物工程'}),(m:mechword{name:'现代化'})with n,m match p=shortestPath((n)-[r*..]-(m)) return p;
这句cypher的意思是找到名字为“生物工程”和名字为“现代化”的mechword节点间最短路径。这里的最短路径可能不是一条,有可能是多条。但是这里假设只返回了一条路径p。
要想求出名字最短的那个节点我们想到的是用min()函数来达到目的。min()函数的功能是返回最小值,那么我们调用min(length(node.name))就可以找到最短名字的长度了。但是node怎么得到呢,很容易想到nodes(p),用 这个函数返回nodes,但是nodes(p)返回的是一个list<node>而min()是一个聚合函数,注意它的参数并不是list类型而是int float或者string 等“单类型” 。所以我们要用到一个关键字unwind,unwind的作用就是将list“打散”,他能将一个数组转化为一行一行的数据。将上面的只是结合起来得到最短名字的长度:
match (n:mechword{name:'生物工程'}),(m:mechword{name:'现代化'})with n,m match p=shortestPath((n)-[r*..]-(m)) unwind nodes(p) as nn with min(length(nn.name))as a return a
得到了最短名字的长度(a=3)那么在找到那些名字长度和a相等的就ok啦!那么继续加长cypher语句得到:
match (n:mechword{name:'生物工程'}),(m:mechword{name:'现代化'})with n,m match p=shortestPath((n)-[r*..]-(m)) unwind nodes(p) as nn with nn,min(length(nn.name))as a with a, nn where length(nn.name)=a return nn.name;
语句返回的结果为 三行 分别为“现代化” “一般问题” “生物工程” 很明显返回的结果是错误的。很奇怪返回了三个值,而且长度不一致。这是怎么回事呢,那么再返回下a看看a还是不是3.
match (n:mechword{name:'生物工程'}),(m:mechword{name:'现代化'})with n,m match p=shortestPath((n)-[r*..]-(m)) unwind nodes(p) as nn with nn,min(length(nn.name))as a with a, nn where length(nn.name)=a return nn.name,a;
结果返回的是[“现代化” ,3][“一般问题”,4][ “生物工程”,4]也就是说a不在是最短名字的长度了。和之前的结果我们发现我们似乎不能把nn with 到最后 否则得不到我们想要的结果。那怎么办呢?很简单再创造一个nn。得到下面的cypher。
match (n:mechword{name:'生物工程'}),(m:mechword{name:'现代化'})with n,m match p=shortestPath((n)-[r*..]-(m)) unwind nodes(p) as nn with unwind nodes(p)as mm,min(length(nn.name))as a with a, mm where length(mm.name)=a return mm.name;
这样写执行的时候有问题,因为 unwind不能紧跟with。那在做一下改变
match (n:mechword{name:'生物工程'}),(m:mechword{name:'现代化'})with n,m match p=shortestPath((n)-[r*..]-(m)) unwind nodes(p) as nn with p,min(length(nn.name))as a unwind nodes(p) as mm with mm where length(mm.name)=a return mm.name;
这样大功告成!返回了“现代化”三个字。
- cypher实践之获取路径中name属性最短的那个节点
- 所有节点对的最短路径之Floyd-Warshall
- 所有节点对的最短路径
- 图的最短路径算法(二)-任意节点最短路径
- 无向图中节点的迭代得到从起始节点到结束节点之间的所有路径,并从中得到最短路径的节点
- 二叉树系列——二叉树中任意两个节点之间的最短路径
- 如何求二叉树中两个节点的最短路径。
- 所有节点对的最短路径问题
- 算法导论 所有节点对的最短路径
- 所有节点最短路径的Johnson实现
- 最短路径之 Dijkstra的优化
- 最短路径之 一个人的旅行
- 邻接矩阵计算节点对最短路径
- 所有节点对最短路径
- 二叉树中两节点之间最短路径
- 在最短路径分析中,为何分析的结果“不是”最短路径
- 最短路径之Dijkstra
- 最短路径之Dijkstra
- the solve of volume problem
- 保留小数点后两位(必须是数字)
- sublime text3快捷键设置为eclipse差不多
- merge and rebase
- Java Map释放内存置null以及调用clear()的区别
- cypher实践之获取路径中name属性最短的那个节点
- chrome开发者工具使用技巧(看了定不让你失望)
- jhat:虚拟机堆转储快照分析工具
- Groovy集合(map)
- 详细图解mongodb下载、安装、配置与使用
- USB 配置,接口,设置,endpoint描述符的关系
- 概率论大作业
- 8. python 点滴
- nginx配置TP5出现Access denied.