【问题标题】:gremlin filtering out edges based on time and fetch max valuegremlin 根据时间过滤边缘并获取最大值
【发布时间】:2017-02-20 22:27:21
【问题描述】:

我有两个顶点之间的边列表,有时间作为边属性键。 例如: A --> B (time=t1,age=20), A-->B (time=t2,age=30) ...

我需要获取大于给定时间的边并取属性'age'的最大值

代码示例:

 val end_time = System.currentTimeMillis() - duration
 val r = graph.V().has(ID, name).outE.filter { it: Edge =>
      (it.property(time).value() > end_time)
    }
 println("r.values("age").max().headOption().get)

这以 Option[Byte] 格式返回。

有没有更好的方法来做到这一点。我也需要整数值。

【问题讨论】:

    标签: scala graph-databases titan gremlin


    【解决方案1】:

    首先,一般情况下,您应该避免使用 lambda: http://tinkerpop.apache.org/docs/current/reference/#a-note-on-lambdas

    您可以使用以下查询根据特定最小值过滤边缘:

    g.V().has('ID', 'a').outE().where(values('time').is(gt(end_time)))
    

    如果您现在想要获取边缘属性的最大值,例如这些边缘的年龄,您可以简单地将其添加到查询中:

    g.V().has('ID', 'a').outE().where(values('time').is(gt(end_time))).values('age').max()
    

    【讨论】:

    • 感谢您的回答。实际上,我的查询是如何获取所有边缘的时间戳大于给定时间的 age 属性的最大值。修改了这样的查询graph.V().has(ID,'A').outE().where(_.value("time").is(P.gt(end_time))).value("age").min().head,它返回我的字节。我需要它作为 Integer 。我怎样才能转换为 int。
    • 我编辑了我的答案,还包括如何获得过滤边缘的最大年龄。但我无法真正帮助您解决获取正确返回类型的问题。您使用的是哪个版本的 Gremlin?
    • 刚刚注意到您用“scala”标记了您的问题,因此您的问题可能是 Gremlin-Scala 特有的。
    猜你喜欢
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多