如何在 Gremlin 中按边值对顶点进行排序

How sort vertices by edge values in Gremlin

给定 air-routes 图,假设我想获得所有可能的一站式路线,如下所示:

[home] --distance--> [stopover] --distance--> [destination]

其中 [home]、[stopover] 和 [destination] 是机场节点,每个节点都有一个 属性 'code' 代表机场代码; distance 是赋予连接两个机场节点的每条边的整数权重。

我如何编写一个查询来获取 [home]、[stopover] 和 [destination] 的机场代码,以便结果排序如下:

  1. [home] 机场代码按字母顺序排序。
  2. 对于每组[home]机场,[stopover]机场代码按[home]和[stopover]之间的距离(升序)排序。
  3. 排序1和2后,[目的地]机场代码按[中途停留]和[目的地]之间的距离排序。

(注:[home]和[destination]是否为同一个机场无所谓)

一种方法是通过 group 嵌套 by 调制。

g.V().
  group().
    by('code').
    by(
      outE('route').
      order().by('dist').
      inV().
      group().
        by('code').
        by(
          outE('route').
          order().by('dist').
          inV().
          values('code').fold())).
  unfold()

结果类似于:

1.  {'SHH': {'WAA': ['KTS', 'SHH', 'OME'], 'OME': ['TLA', 'WMO', 'KTS', 'GLV', 'ELI', 'TNC', 'WAA', 'WBB', 'SHH', 'SKK', 'KKA', 'UNK', 'SVA', 'OTZ', 'GAM', 'ANC']}}
2.  {'KWN': {'BET': ['WNA', 'KWT', 'ATT', 'KUK', 'TLT', 'EEK', 'WTL', 'KKH', 'KWN', 'KLG', 'MLL', 'KWK', 'PQS', 'CYF', 'KPN', 'NME', 'OOK', 'GNU', 'VAK', 'SCM', 'HPB', 'EMK', 'ANC'], 'EEK': ['KWN', 'BET'], 'TOG': ['KWN']}}

3.  {'NUI': {'SCC': ['NUI', 'BTI', 'BRW', 'FAI', 'ANC'], 'BRW': ['ATK', 'AIN', 'NUI', 'PIZ', 'SCC', 'FAI', 'ANC']}}

4.  {'PSG': {'JNU': ['HNH', 'GST', 'HNS', 'SGY', 'SIT', 'KAE', 'PSG', 'YAK', 'KTN', 'ANC', 'SEA'], 'WRG': ['PSG', 'KTN']}}

5.  {'PIP': {'UGB': ['PTH']}}
.
.
.