【问题标题】:Neo4j - How to group all nodes between path by distanceNeo4j - 如何按距离对路径之间的所有节点进行分组
【发布时间】:2018-11-07 14:46:45
【问题描述】:

假设两个给定节点之间有 2 条最短路径相等。我想要的是按距离对它们之间的所有节点进行分组。

例如图中有两条最短路径:
1) A - B - C - D - E
2)A - B - J - K - E

我期望的最终结果是这样的:

B - 1  
C,J - 2  
D, K - 3  
E - 4  

一种方法是找到所有节点,然后循环查找长度,但这既不高效也不绝对正确。

请参考任何文档并参考您的答案,因为我无法找到相同的答案。

【问题讨论】:

  • 对于这种功能,如果你想编码而不是进行密码查询,你应该创建一个用户聚合函数:neo4j.com/docs/developer-manual/current/extending-neo4j/…
  • 如果一个节点出现在多个距离(在同一路径中,或在不同路径中)怎么办?您希望它在结果中出现多次,还是只出现一次(例如,它的最小距离)?
  • @cybersam 要求最短路径不会发生您的情况

标签: neo4j nosql


【解决方案1】:

这是一个基于电影数据集的例子:

MATCH p=allshortestPaths( (bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"}))
WITH nodes(p) AS path
UNWIND range(0, size(path)-1, 1) AS index
    WITH index, path[index] AS node
    RETURN index, collect(DISTINCT node)
    ORDER BY index ASC

找到路径后,我会对其进行迭代以创建index & node 的集合。然后你只需根据索引进行聚合(RETURN index, collect(DISTINCT node)

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2015-05-17
    • 2018-05-07
    • 2017-03-19
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多