Cypher:两个节点之间的节点

时间:2014-09-08 14:45:12

标签: neo4j cypher

奥地利是Western Europe的一部分,Europe属于World的一部分,是 match (n:Country{iso_alpha_2:'AT'})-[PART_OF*]->(q:Geography)-[PART_OF*]->(w:Geography{name:'World'}) return q.name 的一部分。

q.name Europe Western Europe World World Europe Western Europe

查询返回:

World

为什么会返回重复的行?另外,如何仅从Europe向下返回一个节点(在这种情况下只是 match (n:Country{iso_alpha_2:'AT'})-[PART_OF*]->(q:Geography)-[PART_OF*1..1]->(w:Geography{name:'World'}) return q.name )?

q.name Europe World World

此尝试返回:

{{1}}

1 个答案:

答案 0 :(得分:1)

丹尼尔,

这可能取决于您使用的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语句中。要从世界中获取一个元素,请执行查询

MATCH (n:Country{iso_alpha_2:'AT'})-[:PART_OF*]->(q:Geography)-[:PART_OF]->(w:Geography{name:'World'})      
RETURN DISTINCT q.name

使用和不使用DISTINCT关键字尝试此查询,看看您是否确实拥有从奥地利到世界的多条路径。

恩典与和平,

吉姆