Neo4j 密码:两个节点之间的节点

Neo4j 密码:两个节点之间的节点,neo4j,cypher,Neo4j,Cypher,奥地利是西欧的一部分,西欧是欧洲的一部分,欧洲是世界的一部分 匹配(n:Country{iso_alpha_2:'AT})-[PART_OF*]->(q:Geography)-[PART OF*]->(w:Geography{name:'World})返回q.name 查询返回: q、 名字 欧洲 西欧 世界 世界 欧洲 西欧 为什么它返回重复的行?另外,如何只返回一个从World向下一级的节点(在本例中,只返回Europe) 匹配(n:Country{iso_alpha_2:'AT}

奥地利是
西欧
的一部分,西欧是
欧洲
的一部分,欧洲是
世界
的一部分


匹配(n:Country{iso_alpha_2:'AT})-[PART_OF*]->(q:Geography)-[PART OF*]->(w:Geography{name:'World})返回q.name

查询返回:


q、 名字
欧洲
西欧
世界
世界
欧洲
西欧

为什么它返回重复的行?另外,如何只返回一个从
World
向下一级的节点(在本例中,只返回
Europe


匹配(n:Country{iso_alpha_2:'AT})-[PART_OF*]->(q:Geography)-[PART OF*1..1]->(w:Geography{name:'World})返回q.name

此尝试返回:


q、 名字
欧洲
世界
世界

丹尼尔

这可能取决于您使用的Neo4j的版本,或者图形的形式。我刚刚用2.1.3创建了这个图

(:Country {iso_alpha_2 : 'AT'})-[:PART_OF]->(:Geography {name : 'Western Europe'})-[:PART_OF]->(:Geography {name : 'Europe'})-[:PART_OF]->(:Geography {name : 'World'})
然后运行您的查询。我的结果是

Europe
Western Europe
这让我想知道你们是否有从奥地利到世界的多条道路

要获得唯一列表,请将DISTINCT关键字添加到return语句中。要仅从World中获取一个或多个元素,请执行以下查询

MATCH (n:Country{iso_alpha_2:'AT'})-[:PART_OF*]->(q:Geography)-[:PART_OF]->(w:Geography{name:'World'})      
RETURN DISTINCT q.name
尝试使用DISTINCT关键字和不使用DISTINCT关键字的查询,看看您是否确实有从奥地利到世界的多条路径

恩典与和平


Jim

你能通过@StefanArmburster共享你的图形吗?@StefanArmburster,我在这里从头开始重新创建:,并找到原因:
World
在我的数据库中意外地与self有
PART\u的关系。Jim,我运行了你的查询,得到了
类型不匹配:PART\u的已定义为冲突的类型集合(预期关系)(第1行,第64列)“匹配(n:Country{iso_alpha_2:'AT})-[PART_OF*]->(q:Geography)-[PART OF]->(w:Geography{name:'World})”
测试时:
匹配(q:Geography{name:'World})-[r:PART OF]>(w:Geography{name:'World})RETURN r
我发现我确实有一个指向self的
World
节点,它给出了重复的结果。案例结束,感谢您提供了新的视角!很抱歉删除了“:”。我将修复答案。