graph - Neo4j 密码 : topological sort in addition to regular sort?

标签 graph neo4j cypher

假设我有一个节点树,看起来像这样:

enter image description here

哪里这些数字对应于我通常想按 排序的某个值. (可能是时间,也可能是某种分数,无论如何。)

如果我仅按该数字返回它们,我当然会得到这种排序:

1, 2, 3, 4, 5, 6, 7, 8, 9

这通常很好,但除了这种类型之外,我还想应用 的约束。 parent 总是在 child 之前排序 .所以我真正想要的是这种:
3, 2, 1, 4, 5, 6, 7, 8, 9

你可以看到这看起来几乎一样;我们刚刚颠倒了 1, 2, 3 的顺序至 3, 2, 1 .

有没有办法通过 Neo4j Cypher 查询来实现这种排序?



这是一个可以使用此树的实时控制台示例:

http://console.neo4j.org/r/l9mav2

到目前为止,这是我的查询:
MATCH path=( ({i: 3}) <-[:parent*0..]- (node) )
RETURN node, node.i, LENGTH(path)

我只是不确定如何使用此信息:
  • 如果我 ORDER BY node.i ,我得到第一个排序。
  • 如果我 ORDER BY LENGTH(path) ,太嚣张了。例如。 9之前 5, 6, 7, 8 .
  • 以任一顺序将两者结合起来也不起作用。

  • 这可能吗?谢谢!

    最佳答案

    您可以组合这两个值来表示您的排序顺序,只需给 parent 一个更高的优先级:

    MATCH path =((root:Node { i: 3 })<-[:parent*0..]-(node:Node))
    RETURN node, node.i, LENGTH(path)
    ORDER BY LENGTH(path)+ node.id *10
    

    http://console.neo4j.org/r/ijeqlv

    返回
    +--------------------------------------+
    | node         | node.i | LENGTH(path) |
    +--------------------------------------+
    | Node[3]{i:3} | 3      | 0            |
    | Node[2]{i:2} | 2      | 1            |
    | Node[1]{i:1} | 1      | 2            |
    | Node[4]{i:4} | 4      | 1            |
    | Node[5]{i:5} | 5      | 2            |
    | Node[6]{i:6} | 6      | 2            |
    | Node[7]{i:7} | 7      | 2            |
    | Node[8]{i:8} | 8      | 3            |
    | Node[9]{i:9} | 9      | 1            |
    +--------------------------------------+
    9 rows
    32 ms
    

    关于graph - Neo4j 密码 : topological sort in addition to regular sort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377222/

    相关文章:

    c# - 如何使用 native 应用程序 C# XAML 在 Azure AD 上创建新用户?

    javascript - 图的初始节点位置是否会影响 ForceAtlas2 算法中的渐近图配置?

    java - 在一个巨大的稀疏矩阵中找到所有循环

    collections - Neo4j 中的并集和计数集合

    路径之间特定节点标签的 Neo4j 最短路径

    algorithm - Prim 和 Dijkstra 图算法的区别

    java - REST API 或 Java API 之间的选择

    java - Neo4j Web UI 上没有数据

    neo4j EntityNotFound 阻止密码匹配工作

    collections - 在 Cypher 中获取集合的第 n 个元素