代码之家  ›  专栏  ›  技术社区  ›  Wolgan Ens

Neo4J只获取每个节点的第一个关系

  •  1
  • Wolgan Ens  · 技术社区  · 7 年前

    我一直在尝试像下面的Cypher查询:

    MATCH p=(n)-[r:R1]->(c) 
    WHERE id(n) < id(c) and r.coauthors = false 
    return DISTINCT n.name order by n.campus, r.value DESC
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   jacob.mccrumb    7 年前

    如果我错了,请纠正我,但是您希望每个“n”都有一个结果,其中“r”的值最高?

    MATCH (n)-[r:R1]->(c) 
    WHERE r.coauthors = false
    WITH n, r ORDER BY r.value DESC
    WITH n, head(collect(r)) AS highR
    RETURN n.name, highR.value ORDER BY n.campus, highR.value DESC
    

    这会让你把所有的r都整理好然后选第一个 head(collect(r)) ORDER BY . 然后只需返回所需的值。退房 Neo4j Aggregation Functions 有关聚合函数如何工作的一些文档。祝你好运

    顺便说一句,如果所有“n”都有一个标签,你应该在你的匹配中加上: MATCH (n:Person) .... 这将有助于加快您的查询!