繁体   English   中英

Neo4j密码查询链接列表

[英]Neo4j cypher query for linked list

我有下图。 联赛(l1)从LEVEL r1开始,并且使用所示的NEXT关系来关联NEXT级别。

league-[:LEVEL]->r1-[:NEXT]->r2-[:NEXT]->r3-[:NEXT]->r4

我正在寻找的是找到给定联赛的所有级别和顺序。 因此,对于上图,预期输出为r1, r2, r3, r4 我有以下查询,但它返回所有路径。

start l1=node(9)  match l1-[:level]->(level) with level match p=level-[:next*]->(remainingLevels) return p;

用于创建此图的密码。 这已在console.neo4j.org上设置(请确保更改ID)

CREATE (l1 {name: 'l1'}) return l1;
CREATE (r1 {name: 'r1'}) return r1;
START l1=node(9), r1=node(10) CREATE l1-[r:level]->r1;
CREATE (r2 {name: 'r2'}) return r2;
START r1=node(10), r2=node(11) CREATE r1-[r:next]->r2;
CREATE (r3 {name: 'r3'}) return r3;
START r2=node(11), r3=node(12) CREATE r2-[r:next]->r3;
CREATE (r4 {name: 'r4'}) return r4;
START r3=node(12), r4=node(13) CREATE r3-[r:next]->r4;

我清理了您的数据集,并尝试在这里给出答案:

MATCH league-[r:level|next*]->(level) 
WHERE league.name?="l1" 
RETURN level, length(r) AS Dist, r 
ORDER BY length(r)

该查询从联赛(l1)开始,并在所有:level和:next路由中进行跟踪,然后返回找到的节点,这些节点按照从起始节点到达该路由所经过的路由距离进行排序。

请注意,这会找到所有可能的路线,因此,如果有多种方法可以到达关卡,则效果会很差。 就是说,您的图形看起来很像树(没有循环),并且可以正常工作。

这是一个2.0查询,因为它依赖WHERE查询来利用索引来获取图形中的起始节点(l1)。

我设法与下面的查询一起工作。

start l1=node(9) 
match l1-[:level]->(level) 
with level 
match p = level-[:next*]->(remainingLevels) 
with level, max(length(p)) as maxlen 
match p = level-[:next*]->(remainingLevels) 
where length(p)=maxlen
return nodes(p);

产量

+-----------------------------------------------------------------------------------+
==> | nodes(p)                                                                          |
==> +-----------------------------------------------------------------------------------+
==> | [Node[10]{name:"r1"},Node[11]{name:"r2"},Node[12]{name:"r3"},Node[13]{name:"r4"}] |
==> +-----------------------------------------------------------------------------------+

欢迎进行任何简化或优化。

这个查询怎么样

匹配p = league1-[:level]->(level)-[:next *]-> endLevel

在哪里League1.name?='l1'并且不是(endLevel-[:next]->())

返回尾(节点(p))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM