2012-07-17 65 views
4

我有一个结构,像这样:如何仅返回Neo4j密码查询中的结束/叶节点?

用户 - [:说] - >话题 - [: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 
+1

是,最后的查询是合理的。你没有任何进一步传出的'categorized_in'关系来检查根目录。 – 2012-07-19 06:39:32

回答

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

你可以现在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