我有一个类似的业务问题 - 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中执行相同的逻辑?
这看起来像是某种类型的序列化错误,但我不确定您为解决这个问题而采取的操作环境。当你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
,所以很奇怪你会遇到这个问题。