如何根据gremlin map(OrientDB)进行过滤

问题描述 投票:0回答:1

我有一个类似的业务问题 - Gremlin filter by count,但我正在运行OrientDB 3.0.16

这个查询:

  g.V().hasLabel('skill').
   groupCount()

正如预期的那样从OrientDB返回:

{
"result": [
    {
        "com": 1,
        "netcompactframework": 1,
        "netremoting": 2,
        "netframework": 3,
        "net": 1,
        "netclr": 1
    }
],
"elapsedMs": 18

}

我尝试应用展开和后面的过滤器:

  g.V().hasLabel('skill').
   groupCount().
   unfold().
   where(select(values).is(gt(1)))

但是我收到一个错误:

{
"errors": [
    {
        "reason": 501,
        "code": 501,
        "content": "java.lang.UnsupportedOperationException: Cannot convert netremoting=2 - class java.util.HashMap$Node to JSON"
    }
]

}

似乎问题是使用unfold(),因为OrientDB正在尝试将映射条目字符串转换为JSON并失败

有任何想法吗?这是OrientDB的具体问题吗?也许还有另一种方法可以在gremlin中执行相同的逻辑?

orientdb gremlin
1个回答
0
投票

这看起来像是某种类型的序列化错误,但我不确定您为解决这个问题而采取的操作环境。当你unfold()一个Map时,它会被转换为Java Map.Entry并返回,这对于序列化器来说似乎是一个问题,它一直遇到内部类HashMap$Node。我认为你可以通过折回Map来解决这个问题:

g.V().hasLabel('skill').
   groupCount().
   unfold().
   where(select(values).is(gt(1))).
   group().
     by(keys).
     by(select(values))

我很想知道什么情况会导致你得到那个错误。 Gremlin Server中的标准GraphSON序列化程序应该能够处理HashMap$Node,所以很奇怪你会遇到这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.