使用海王星的gremlin:使用具有先前边值的数学结果过滤边 [英] Gremlin with Neptune: filter edges using math result with previous edge value

查看:12
本文介绍了使用海王星的gremlin:使用具有先前边值的数学结果过滤边的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下图表:

我想解决以下遍历问题:

  1. 从节点ABC-01-05";开始
  2. 转到主IP节点(ID:abc)
  3. 从IP节点遍历边,其中日期小于第2步中遍历的边+1天
  4. 结果应为节点:abc-01-05和abc-02-05

我能进行的最佳查询是基于this response,但不起作用:

g.V('abc-01-05')
    .outE('related_to').as_('saved_edge')
    .inV()
    .inE('related_to')
    .where(
        P.lte('saved_edge')
    )
    .by('at_millis')
    .by(__.math('saved_edge + 86400001').by('at_millis'))
    .toList()

这将返回此错误:

GremlinServerError: 500: {"requestId":"3aaaca37-75eb-4650-b111-130c6e65b040","code":"InternalFailureException","detailedMessage":"Exception processing a script on request [RequestMessage{, requestId=3aaaca37-75eb-4650-b111-130c6e65b040, op='bytecode', processor='traversal', args={gremlin=[[], [V(abc-01-05), outE(related_to), as(saved_edge), inV(), inE(related_to), where(lte(saved_edge)), by(at_millis), by([[], [math(saved_edge + 86400001), by(at_millis)]])]], aliases={g=g}}}]."}

任何帮助都会很有帮助!谢谢!

推荐答案

添加另一个答案只是为了指出您在原始查询中看到的错误是因为需要反转by步骤。第二by调制器被应用于where步骤内的标签。第一个by调制器定义将与之进行比较的对象。此外,要使测试正常工作,需要对被测试的值进行微小的调整。以下是原始查询的工作版本。

g.V('abc-01-05')
    .outE('related_to').as('saved_edge')
    .inV()
    .inE('related_to').as('related')
    .where(P.lte('related'))
      .by(__.math('saved_edge + 86400000').by('at_millis'))
      .by('at_millis')

这篇关于使用海王星的gremlin:使用具有先前边值的数学结果过滤边的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆