neo4j - Neo4j 在遍历时返回重复节点
问题描述
在查询 ne04j 的遍历顺序时。它遍历数倍的节点。我正在附加密码查询以创建节点和关系以及它返回的结果。任何帮助表示赞赏。
CREATE (a:Package {name:'A'})
CREATE (b:Package {name:'B'})
CREATE (c:Package {name:'C'})
CREATE (d:Package {name:'D'})
CREATE (e:Package {name:'E'})
CREATE (f:Package {name:'F'})
CREATE (g:Package {name:'G'})
CREATE (h:Package {name:'H'})
CREATE (i:Package {name:'I'})
CREATE (o:Package {name:'O'})
CREATE (z:Package {name:'Z'})
CREATE (j:SEG2 {name:'India'})
CREATE (k:SEG1 {name:'Natural Account'})
CREATE (l:SEG3 {name:'Engineering'})
CREATE (m:SEG4 {name:'Currency'})
create (a)-[:DEPENDS_ON]->(b)
create (a)-[:DEPENDS_ON]->(d)
create (d)-[:DEPENDS_ON]->(e)
create (b)-[:DEPENDS_ON]->(c)
create (b)-[:DEPENDS_ON]->(f)
create (b)-[:DEPENDS_ON]->(g)
create (h)-[:DEPENDS_ON]->(g)
create (i)-[:DEPENDS_ON]->(a)
create (z)-[:DEPENDS_ON]->(a)
create (i)-[:DEPENDS_ON]->(z)
create (o)-[:DEPENDS_ON]->(i)
create (j)-[:MAP_TO]->(a)
create (k)-[:MAP_TO]->(a)
create (l)-[:MAP_TO]->(a)
create (m)-[:MAP_TO]->(a)
return a,b,c,d,e,f,g,h,i,j,k,l,m,o,z
密码查询:
MATCH (s3:SEG3{name:'Engineering'})-[:MAP_TO]->(ANODE:Package{name:'A'})
WITH ANODE
MATCH (s4:SEG4{name:'Currency'})-[:MAP_TO]->(ANODE)
MATCH (GG)-[:DEPENDS_ON*0..]->(ANODE)
RETURN collect(GG.name)
结果:
["A", "I", "O", "Z", "I", "O"]
我期待着
["A","Z", "I", "O"]
解决方案
这是因为您可以通过数据中的多个路径获得结果。根据聊天,您需要解决依赖关系的顺序。要获得此顺序,您可以按从根开始的最大路径长度排序:
MATCH (s3:SEG3{name:'Engineering'})-[:MAP_TO]->(ANODE:Package{name:'A'}),
(s4:SEG4{name:'Currency'})-[:MAP_TO]->(ANODE),
p=(GG)-[:DEPENDS_ON*0..]->(ANODE)
WITH GG.name as name,max(length(p)) as l
ORDER BY l
RETURN collect(name)
另请注意,您不必MATCH
为模式的每个部分重复该子句。
推荐阅读
- python - 如何在 selenium 上将多个文本连接在一起?
- php - 允许的用户角色的 WooCommerce 优惠券使用限制
- c# - 如何在 C# 中获取 JSON 中的最后一项
- vba - 从 Outlook 项目中提取最后更新的时间戳
- css - Bootstrap vue:表单组标签样式
- c++ - 使用 Dijkstra 算法跟踪两个节点之间的最短路径
- javascript - 使用 HTTP PUT 获取后 setState 挂钩未更新
- angular - DataGrid 不包含在 Angular 订阅范围内的“this”上下文中
- angular - 在 Angular 中路由到外部应用程序(例如 Wordpress)
- vba - 将参考库添加到外部 MS Access 数据库