如何在Neo4j cypher查询中仅返回结束/叶节点?

如何在Neo4j cypher查询中仅返回结束/叶节点?,neo4j,cypher,Neo4j,Cypher,我有一个这样的结构: 用户-[:交谈]->主题-[:分类]->主题[:分类]->主题。。。等 从一个用户开始,我如何获得他们谈论的最远的话题。基本上,这代表了他们谈论的顶级类别。这是我知道的唯一一种执行此操作的方法,它会返回沿途的所有节点,而不仅仅是叶节点 START user=node(1) MATCH user-[:talking]->x<-[:categorized_in*0..]-y RETURN distinct y.uuid START user=node(1) 匹配用

我有一个这样的结构:

用户-[:交谈]->主题-[:分类]->主题[:分类]->主题。。。等

从一个用户开始,我如何获得他们谈论的最远的话题。基本上,这代表了他们谈论的顶级类别。这是我知道的唯一一种执行此操作的方法,它会返回沿途的所有节点,而不仅仅是叶节点

START user=node(1)
MATCH user-[:talking]->x<-[:categorized_in*0..]-y
RETURN distinct y.uuid
START user=node(1)

匹配用户-[:talking]->x所以这是如何为任何感兴趣的人做的:

START user=node(1)
MATCH user-[:talking]->x<-[:categorized_in*0..]-y<-[?:categorized_in]-z
WHERE z is null
RETURN distinct y.uuid
START user=node(1)
匹配用户-[:talking]>x您现在可以

因此,如果您有一个更新版本的Neo4j,我认为查询如下

START user=node(1)
MATCH user-[:talking]->x<-[:categorized_in*0..]-y
WHERE NOT(y<-[:categorized_in]-())
RETURN DISTINCT y.uuid
START user=node(1)

匹配用户-[:talking]>xYes,最后一个查询是合理的。通过在
关系中没有任何进一步的传出
分类\u来检查根。
START user=node(1)
MATCH user-[:talking]->x<-[:categorized_in*0..]-y
WHERE NOT(y<-[:categorized_in]-())
RETURN DISTINCT y.uuid