Graph 使用cypher在neo4j中查找具有指向它的大量关系的节点

Graph 使用cypher在neo4j中查找具有指向它的大量关系的节点,graph,neo4j,cypher,Graph,Neo4j,Cypher,我有一个neo4j数据库,其节点遵循此结构 [a:article_id] -[r:about_place]-> [l:location] 现在我想找到文章id,位置对,其中位置有很多传入关系(比如>4) 这样做有效,我可以根据需要获得位置列表 但我现在也想要所有的收入文章,就像中国的5篇文章ID所指的那样 像这样的, MATCH (a)-[r:about_place]->(n) WITH a,n,count(r) as rel_cnt where rel_cnt > 4 R

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

[a:article_id] -[r:about_place]-> [l:location]
现在我想找到文章id,位置对,其中位置有很多传入关系(比如>4)

这样做有效,我可以根据需要获得位置列表

但我现在也想要所有的收入文章,就像中国的5篇文章ID所指的那样

像这样的,

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行。我猜是因为现在在group子句中使用了(a,n)组合,这使得count(r)在每行中始终为1。 我在一次谈话中看到,默认情况下,count(*)子句就是这样工作的

我认为一个解决办法是将这些结果链接起来,并提出一个新的查询,但就我个人而言,我不知道该怎么做。
任何想法或链接都会有所帮助。

我不确定是否有比这更好的方法:

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\u place]->(n:location)
    )以获得更好的性能
  • Neo4j公约在这种情况下有标签
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;