如何只返回Neo4j cypher查询中的end / leaf节点?

时间:2012-07-17 17:00:26

标签: neo4j cypher

我有这样的结构:

用户 - [:会话] - >主题 - [:categorized_in] - >主题[:categorized_in] - >主题...等

从用户开始,我将如何获得他们所谈论的最远的话题。基本上这代表了他们所谈论的顶级类别。这是我知道这样做的唯一方法,它会返回所有节点,而不仅仅是叶子节点。

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

这是我最近的尝试。它似乎有效,但我不知道这是否是最好的方法呢?:

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

2 个答案:

答案 0 :(得分:2)

所以这是为任何感兴趣的人做的:

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

答案 1 :(得分:1)

您现在可以filter against patterns in the WHERE

因此,如果您有更新版本的Neo4j,我认为查询看起来像

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