Neo4j:获取查询节点之间的所有关系

时间:2017-09-07 12:52:47

标签: neo4j path cypher graph-databases

我想创建一个cypher查询,执行以下任务:

  1. 有一个给定的起始节点,我希望获得2跳中的所有相关节点
  2. 按跳数asc对查询的节点进行排序,并使用给定的数字
  3. 对其进行限制
  4. 并获得1的结果之间的所有关系。
  5. 我尝试了大量的查询,我在下面查询了第1,2步

    MATCH path=((start {eid:12018})-[r:REAL_CALL*1..2]-(end))
    WITH start, end, path
    ORDER BY length(path) ASC
    RETURN start, collect(distinct end)[..10]
    

    但是当我尝试使用以下查询获取查询路径中的关系时,它会返回路径中的所有关系:

    MATCH path=((start {eid:12018})-[r:REAL_CALL*1..2]-(end))
    WITH start, end, path
    ORDER BY length(path) ASC
    RETURN start, collect(distinct end)[..10], relationships(path)
    

    我想我必须再次匹配第一场比赛的结果,而不是直接从路径获得关系,但我的所有尝试都失败了。

    如何获取查询节点之间的所有关系? 非常感谢,非常感谢。

1 个答案:

答案 0 :(得分:1)

[EDITED]

这样的事可能适合你:

MATCH (start {eid:12018})-[rels:REAL_CALL*..2]-(end)
RETURN start, end, COLLECT(rels) AS rels_collection
ORDER BY
  REDUCE(s = 2, rs in rels_collection | CASE WHEN SIZE(rs) < s THEN SIZE(rs) ELSE s END)
LIMIT 10;

COLLECT aggregation function将为每个不同的start/end对生成一个(关系集合)集合。 LIMIT子句根据start/end子句将返回的结果限制为前10个ORDER BY对。 ORDER BY子句使用REDCUE来计算给定end节点的每条路径的最小大小。