【问题标题】:Gremlin order on Map results地图结果上的 Gremlin 顺序
【发布时间】:2020-02-23 13:47:11
【问题描述】:

我有以下查询:

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 返回一个 MAP 对象。

【问题讨论】:

    标签: gremlin janusgraph amazon-neptune


    【解决方案1】:

    这里有几种方法可以解决它。首先,您可以按原样使用您的代码,然后通过“时间戳”使用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(...)),但希望您了解我在其中尝试做什么。

    【讨论】:

    • 第一种方法效果很好。谢谢你。我不完全确定第二种方法。 R1 或 R2 上没有称为“时间戳”的属性。所以我真的不明白在这种情况下按时间戳排序是如何工作的。我会测试并回来发表另一条评论。
    • 抱歉 - 我修改了第二个查询。
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多