【问题标题】:Can I count the number of nodes that are connected to other nodes via specific paths?我可以计算通过特定路径连接到其他节点的节点数吗?
【发布时间】:2022-01-21 17:25:31
【问题描述】:

您好,我有Post 节点,可以通过REPLY_TO 关系回复这些Posts。

像这样: MATCH (p2:Post)-[r:REPLY_TO]->(p:Post)

我要做的是计算总共有多少回复,目前最大深度是 4 个嵌套回复,同一帖子可以有很多回复,例如:

Post5 -[]-> Post4 -[]-> Post3 -[]-> Post2 -[]-> Post1

Post7 -[]-> Post6 -[]-> Post2 -[]-> Post1

Post8 -[]-> Post1

我不知道如何计算回复一篇帖子的所有帖子。任何想法?我从这个开始并尝试将count 更改为size 并使用collect,我只是无法弄清楚我需要在这里寻找什么!

WITH collect(p2) as post2_count, p2
MATCH (p3:Post)-[r3:REPLY_TO]->(p2)
WITH collect(p3) as post3_count, p3, post2_count
RETURN p2_count, count(post3_count)

上面只有2层深,但在那里不起作用所以我没有扩展到4层。

提前谢谢你!

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    对于这样的事情,您可以使用pattern comprehensions。 BTW 是一个很好的例子,说明了为什么图形数据库如此有用,因为它们允许查找可变长度的路径!

    对于这张图

    可以使用此密码创建:

    CREATE (_241:`Post` { `name`: 'A' }) CREATE (_242:`Post` { `name`: 'B' }) CREATE (_243:`Post` { `name`: 'C' }) CREATE (_244:`Post` { `name`: 'D' }) CREATE (_245:`Post` { `name`: 'E' }) CREATE (_242)-[:`REPLY_TO` {}]->(_241) CREATE (_243)-[:`REPLY_TO` {}]->(_242) CREATE (_244)-[:`REPLY_TO` {}]->(_242) CREATE (_245)-[:`REPLY_TO` {}]->(_244) 
    

    此查询返回所有(内)直接回复(是的,简短而简单):

    MATCH (p:Post)
    RETURN p.name as post,    
           SIZE([(p)<-[:REPLY_TO*]-(reply:Post) | reply]) AS replies
    

    返回这个结果:

    ╒══════╤═════════╕
    │"post"│"replies"│
    ╞══════╪═════════╡
    │"A"   │4        │
    ├──────┼─────────┤
    │"B"   │3        │
    ├──────┼─────────┤
    │"C"   │0        │
    ├──────┼─────────┤
    │"D"   │1        │
    ├──────┼─────────┤
    │"E"   │0        │
    └──────┴─────────┘
    

    如果您只想要直接回复:

    MATCH (p:Post)
    RETURN p.name as post,    
           SIZE([(p)<-[:REPLY_TO]-(reply:Post) | reply ]) AS replies
    

    您只需删除可变长度指示符*

    ╒══════╤═════════╕
    │"post"│"replies"│
    ╞══════╪═════════╡
    │"A"   │1        │
    ├──────┼─────────┤
    │"B"   │2        │
    ├──────┼─────────┤
    │"C"   │0        │
    ├──────┼─────────┤
    │"D"   │1        │
    ├──────┼─────────┤
    │"E"   │0        │
    └──────┴─────────┘
    

    【讨论】:

    • 哇,效果立竿见影,非常感谢您引导我完成它并提供两个答案(我最终同时使用了这两个)!祝你有美好的一天,节日快乐!
    • @DanFein 很高兴听到。请接受答案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2015-08-16
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多