代码之家  ›  专栏  ›  技术社区  ›  rayman

使用Neo4j的Cypher返回我的朋友和朋友的朋友

  •  3
  • rayman  · 技术社区  · 10 年前

    我有具有双向关系的节点(跟随)

    我正在尝试创建一个查询,希望返回特定节点的所有后续节点及其后续节点的后续节点(3个希望深度)

    例如,假设以下关系:

    ->符号跟随

    A->B
    B->A
    B->C
    C->B
    C->D
    D->C
    C->E
    E->C
    

    如果在节点A上执行查询,我希望得到此响应

    B C D E

    我试过了:

    MATCH (user:User {name:'roi'})-[:nearby*1..3]->(foaf)
    WHERE NOT((user)-[:nearby]->(foaf))
    RETURN user, foaf
    

    问题是我没有得到节点(A)只关注他关注的朋友的关注

    所以我得到了

    C D E

    我没有得到 B

    有人能帮忙吗? 谢谢

    1 回复  |  直到 10 年前
        1
  •  3
  •   jjaderberg    10 年前

    你不明白 B 因为你的 WHERE 模式过滤掉 [:NEARBY] A 对于那种特殊的关系,就像说

    MATCH A-[:NEARBY]->B
    WHERE NOT(A-[:NEARBY]->B)
    

    编辑

    如果你想让一个用户的朋友和朋友的朋友深度三,而不是用户,你可以这样做

    MATCH (user:User {name:'roi'})-[:NEARBY*1..3]->f
    WHERE f <> user
    RETURN f