使用cypher在neo4j中找到有很多关系指向它的节点

时间:2015-06-29 17:52:06

标签: graph neo4j cypher

我有一个neo4j数据库,其节点遵循此结构

[a:article_id] -[r:about_place]-> [l:location]

现在我想找到article_id,位置对,其中位置有很多传入关系(比如> 4)

MATCH ()-[r:about_place]->(n)
WITH n,count(r) as rel_cnt
where rel_cnt > 4
RETURN n.name,rel_cnt; 

这个工作,我得到我需要的位置列表。

list of answers from query

但我现在也想要关系中的所有收到的文章,就像中国指出的5篇文章那样。

这样的事,

MATCH (a)-[r:about_place]->(n)
WITH a,n,count(r) as rel_cnt
where rel_cnt > 4
RETURN a.title,n.name,rel_cnt;

但这会返回0行。我猜是因为现在(a,n)组合用在group子句中,这使得count(r)在每一行中总是为1。 我在一次演讲中看到这是count(*)子句默认工作的方式。

我认为解决方案是将这些结果链接起来并提出新的查询,但对于我的生活,我无法弄清楚如何。 任何想法或链接也会有所帮助。

1 个答案:

答案 0 :(得分:2)

我不确定是否有更好的方式:

MATCH ()-[r:about_place]->(n)
WITH n, count(r) as rel_cnt
WHERE rel_cnt > 4
MATCH (a)-[r:about_place]->(n)
RETURN a.title,n.name,rel_cnt;

此外,未经请求的说明:

  • 您可能希望在查询中使用该标签(例如MATCH ()-[r:about_place]->(n:location))以获得更好的效果
  • Neo4j约定在CamelCase中有标签