地图结果上的 Gremlin 顺序

Gremlin order on Map results

我有以下查询:

g.V('1')
    .union(
        out('R1')
            .project('timestamp', 'data')
                .by('completionDate')
                .by(valueMap().by(unfold()))
        out('R2')
            .project('timestamp', 'data')
                .by('endDate')
                .by(valueMap().by(unfold()))
        )

如何按时间戳对 UNION 结果进行排序? 我试过使用“.order().by('timestamp')”,但这只适用于遍历和 UNION returns 一个 MAP 对象。

这里有几种处理方法。首先,您可以按原样使用您的代码,然后 "timestamp":

order()
g.V('1').
  union(out('R1').
          project('timestamp', 'data').
            by('completionDate').
            by(valueMap().by(unfold())),
        out('R2').
          project('timestamp', 'data').
            by('endDate').
            by(valueMap().by(unfold()))).
  order().by(select('timestamp'))

请注意,区别在于 select() 您要排序的 Map 中的键。 3.4.5 之后的版本将工作 more as you expect,您可以简单地为 MapElement.

执行 by('timestamp')

不过,我认为一种更具可读性的方法是采用这种方法:

g.V('1').
  out('R1','R2').
  project('timestamp', 'data').
    by(coalesce(values('endDate'), values('completionDate'))).
    by(valueMap().by(unfold())).
  order().by(select('timestamp'))

您可能需要根据您的模式的性质来增强 by(coalesce(...)),但希望您了解我正在尝试做的事情。