如何在gremlin地图(OrientDB)上按计数过滤

时间:2019-04-11 14:52:13

标签: orientdb gremlin

我的业务问题与-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"
    }
]

}

由于OrientDB试图将地图条目字符串转换为JSON并失败,因此unfold()似乎有问题

有什么想法吗? 这是OrientDB的特定问题吗?也许还有另一种方法可以在gremlin中执行相同的逻辑?

1 个答案:

答案 0 :(得分: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,因此很好奇您根本会遇到此问题。