如何在Neo4j的Cypher查询中仅返回末端/叶节点?

4

我有一个这样的结构:

user-[:talking]->topic-[:categorized_in]->topic[:categorized_in]->topic...等等

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

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

1
是的,最后一个查询是合理的。您可以通过没有任何其他传出的“categorized_in”关系来检查根。 - Peter Neubauer
2个回答

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
你现在可以筛选WHERE中的模式
所以如果你有一个更新版本的Neo4j,我认为查询会是这样的。
START user=node(1)
MATCH user-[:talking]->x<-[:categorized_in*0..]-y
WHERE NOT(y<-[:categorized_in]-())
RETURN DISTINCT y.uuid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接