【问题标题】:Finding Nodes with lots of relations pointing to it in neo4j using cypher使用密码在neo4j中查找具有大量指向它的关系的节点
【发布时间】:2015-06-29 17:52:06
【问题描述】:

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

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

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

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

这行得通,我得到了我需要的位置列表。

但我现在也想要来自该关系的所有传入文章,比如中国指向它的 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(*) 子句默认的工作方式。

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

【问题讨论】:

    标签: graph neo4j cypher


    【解决方案1】:

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

    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 中有标签

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 2016-01-25
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多