【问题标题】:type casting in gremlin query在 gremlin 查询中进行类型转换
【发布时间】:2018-05-10 06:31:54
【问题描述】:

如何使用 AWS Neptune GDB 在 gremlin 控制台中将字符串值转换为整数类型。 我有带有字符串值的属性“年龄”,需要将其转换为整数类型以进行查询中的数学运算。 感谢所有建议。

我尝试了以下 kelvin 建议的查询。但是得到了这些异常。

    gremlin> g.V(1).values('age').map{(String)it}.next()
    Script336735.groovy: 1: [Static type checking] - Inconvertible types:cannot cast org.apache.tinkerpop.gremlin.process.traversal.Traverser <E2 extends java.lang.Object> to java.lang.String
    gremlin> g.V(1).values('age').map{(Integer)it}.next()
    Script336963.groovy: 1: [Static type checking] - Inconvertible types: cannot cast org.apache.tinkerpop.gremlin.process.traversal.Traverser <E2 extends java.lang.Object> to java.lang.Integer

我的要求是将 String 值转换为 Integer/long

【问题讨论】:

    标签: gremlin amazon-neptune


    【解决方案1】:

    感谢开尔文。 最后,此查询适用于 AWS-Neptune GraphDB。

    gremlin> g.V(1).values('age').map{(''+it).toInteger()}
    ==>25
    

    除了 toInteger(),我们可以使用其他类似的 java 方法。

    【讨论】:

    • 优秀。很高兴你设法让它工作。希望我至少让你更接近一点:-)
    • 是的,您的答案有所不同。感谢您对破解此问题的支持。
    【解决方案2】:

    我很好奇你为什么将一个年龄存储为一个字符串开始,但也就是说,如果你能够使用 Lambda,你可以在地图步骤中进行强制转换。这是我的航线图中的一个示例(跑道是整数类型):

    gremlin> g.V(3).values('runways').map {(String)it}.next().class
    ==>class java.lang.String
    

    干杯 开尔文

    【讨论】:

    • 谢谢开尔文。它适用于 neo4j,但不适用于 AWS Neptune gdb。你能帮我解决这个问题吗?
    • 当您使用 Neptune 进行尝试时,您收到了什么错误消息?可能尚不支持我在示例中使用的 Lambda。
    • 我在这些查询中遇到了上述异常。
    • 您可以尝试以下几种变体。海王星文档暗示可能需要额外的下一步。 g.V(3).map {(String)it.get().values('runways')}.next().class 或者你可以试试g.V(3).map {(String)it.get().values('runways').next()}.next().class
    • 在我们的 GDB(320 万顶点)中有预先存在的年龄为字符串的数据。我无权更改数据。所以,我试图在查询中转换数据,这减少了脚本的工作。我需要对其进行数学运算,这只能在 Integer 系列上进行,并且可以使用 gremlin 轻松实现。如果您对适用于 AWS-Neptune 的查询有任何建议,这将很有帮助。
    【解决方案3】:

    根据https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html#w3aac12c22c10c15c47

    Neptune 不支持 Lambda 步骤。

    如果我尝试上面的查询,我会得到:

    无法解释 Gremlin 查询:查询解析失败...

    这是过去支持的东西吗?

    【讨论】:

    • 是的,它在预览版中被支持,但在正式版本中被弃用了。
    • 我明白了,感谢您的回复。那么有没有其他方法可以在 Neptune 的查询中输入大小写?
    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多