我想创建一个cypher查询,执行以下任务:
我尝试了大量的查询,我在下面查询了第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)
我想我必须再次匹配第一场比赛的结果,而不是直接从路径获得关系,但我的所有尝试都失败了。
如何获取查询节点之间的所有关系? 非常感谢,非常感谢。
答案 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
节点的每条路径的最小大小。