Neo4j:获取查询节点之间的所有关系
Neo4j: get all relations between queried nodes
我想进行以下任务的密码查询:
- 有一个给定的起始节点,我想在2跳内得到所有相关节点
- 查询到的节点按跳数递增排序,并限制给定数量
- 并得到1的结果之间的所有关系。
我尝试了很多查询,并针对第 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]
但是当我尝试使用以下查询获取查询路径中的关系时,returns 路径中的所有关系:
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)
我想我必须再次匹配第一次匹配的结果而不是直接从路径获取关系,但我所有的尝试都失败了。
如何获取查询节点之间的所有关系?
任何帮助赞赏,非常感谢。
[编辑]
类似这样的东西可能对你有用:
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
子句基于 ORDER BY
子句将返回结果限制为前 10 个 start/end
对。 ORDER BY
子句使用 REDCUE
计算到给定 end
节点的每条路径的最小大小。
我想进行以下任务的密码查询:
- 有一个给定的起始节点,我想在2跳内得到所有相关节点
- 查询到的节点按跳数递增排序,并限制给定数量
- 并得到1的结果之间的所有关系。
我尝试了很多查询,并针对第 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]
但是当我尝试使用以下查询获取查询路径中的关系时,returns 路径中的所有关系:
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)
我想我必须再次匹配第一次匹配的结果而不是直接从路径获取关系,但我所有的尝试都失败了。
如何获取查询节点之间的所有关系? 任何帮助赞赏,非常感谢。
[编辑]
类似这样的东西可能对你有用:
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
子句基于 ORDER BY
子句将返回结果限制为前 10 个 start/end
对。 ORDER BY
子句使用 REDCUE
计算到给定 end
节点的每条路径的最小大小。