【问题标题】:Neo4j Cypher get all nodes in a circular linked listNeo4j Cypher 获取循环链表中的所有节点
【发布时间】:2023-03-20 21:03:01
【问题描述】:

我有一个看起来像这样的图表

(user)->[:Comments]->(comment)->[:Comments]->(comment)->[:Comments]->(comment)->(user)

基本上它是一个用户创建的 cmets 的循环链表。该列表环绕并最终回到用户处。如何使用 cypher 检索所有 cmets?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    对此进行了尝试,这对我来说似乎有点令人费解,但无论如何都是这样。

    假设从最后一条评论到用户的关系是 :Comments

    即代替..->(comment)->(user)

    我假设..->(comment)-[:Comments]->(user)

    START n=node(1) 
    MATCH n-[:Comments*0..]->(c) 
    WHERE c<>n 
    WITH collect(c) AS allComments,n 
    WITH last(allComments) AS lastcomment,n,allComments 
    WHERE lastcomment-[:Comments]->n 
    RETURN allComments
    

    我必须输入 WHERE cn,因为最后一个评论->用户关系是评论。如果它是别的东西,那就更好了,不需要这个(它在那里只是选择链中的最后一个评论)。它还返回一个集合。

    http://console.neo4j.org/r/17d1fy

    打赌@Wes Freeman 有一个更好的解决方案

    【讨论】:

    • 很好,控制台的结果怎么会返回用户?
    • 我把你拥有的东西编辑成这个:console.neo4j.org/?id=cx1gh9 有你的心,但不会返回用户。
    • 好问题,让我回到我的,检查用户为什么回来,没有注意到。您发布的控制台示例是我第一次尝试,但问题是您还将获得没有与原始用户连接的最后评论的链。如果没问题,那么你就不需要我的所有额外的东西(这基本上是为了建立最终的链接)
    • 愚蠢的错误...我在那里有深度 0,更改为 MATCH n-[:Comments*1..]->c 它将排除用户
    • 谢谢,我不需要用户(因为无论如何我都会退回他)。 +1 来自我。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多