Neo4J cypher:从平坦的结果集中删除循环 [英] Neo4J cypher: remove loops from flattened resultset

查看:78
本文介绍了Neo4J cypher:从平坦的结果集中删除循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是以下问题的扩展:

我在 Neo4J 中有一个与数据谱系相关的图,其中可变长度路径包含中间节点(表)作为数组:

I have a data lineage related graph in Neo4J with variable length path containing intermediate nodes (tables) as an array:

match p=(s)-[r:airflow_loads_to*]->(t)
where s.database_name='hive'
and s.schema_name='test'
and s.name="source_table"
return s.name, [n in nodes(p) | n.name] as arrayOfName,t.name

现在,此结果集包含想省略。我可以通过运行以下命令来 删除这些循环,而不会弄平ArrayOfName结果:

Now, this resultset contains loops that I want to omit. I can 'remove' these loops without the flattening ArrayOfName result by running:

match p=(s)-[r:airflow_loads_to*]->(t)
where s.database_name='hive'
and s.schema_name='test'
and s.name="source_table"
return s.name, min(size(r)) as pathlen, t.name
order by pathlen

$ b排序
$ b

但是,当我重新添加ArrayOfName时,结果集再次包含所有行。
我想这意味着以某种方式链接结果,使用 pathlen作为过滤器防止路径p中存在循环
但是我对如何实现此目标感到困惑...

推荐答案

尝试

p=shortestPath((s)-[r:airflow_loads_to*]->(t))

因为似乎正是您所需要的

because it seems that is what you need

这篇关于Neo4J cypher:从平坦的结果集中删除循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆