【问题标题】:Neo4J Cypher grabbing type of relations when using variable length pathsNeo4J Cypher 在使用可变长度路径时抓取关系类型
【发布时间】:2015-05-08 13:45:34
【问题描述】:

查询:

Match (d:User {name:"User"}) -[r:IS_MEMBER_OF]->(g:Group:Local) - [r1:IS_SUBGROUP_OF*0..]->(g1:Group) Return type(r), type(r1)

cypher 命令类型对没有可变长度路径的关系有效,但对可变路径无效,即使它们具有相同的名称。我如何获取 r1 的名称(类型)作为查询的返回值?

谢谢, 乙

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    不幸的是,2.2.1 版(可能还有一些更早的版本)中似乎有 a bug 阻止了它的工作:

    MATCH (:User { name:"User" })-[r:IS_MEMBER_OF]->(:Group:Local)-[r1:IS_SUBGROUP_OF*0..]->(:Group)
    RETURN type(r), EXTRACT(rel IN r1 | type(rel)) AS ancestorGroupTypes;
    

    因此,在上述更简单的查询再次起作用之前,这是一种解决方法:

    MATCH p=(:User {name:"User"})-[r:IS_MEMBER_OF]->(:Group:Local)-[r1:IS_SUBGROUP_OF*0..]->(:Group)
    Return type(r), EXTRACT (rel IN TAIL(RELATIONSHIPS(p)) | type(rel)) AS ancestorGroupTypes;
    

    【讨论】:

    • 有道理,谢谢。我试过了,但遇到了一个问题:“预计r1 是一个集合,但它是一个关系”。我假设 'r1' 将是路径上的所有关系,所以我不确定问题可能出在哪里。
    • 是的,似乎有一个错误。我已经为我的答案添加了解决方法。
    • 是的,现在它按预期工作了。非常感谢您的努力!
    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多