Как фильтровать по количеству на карте Гремлина (OrientDB) - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть бизнес-проблема, похожая на - Фильтр Гремлин по количеству , но я работаю на 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"
    }
]

}

Похоже, что проблема связана с Unold (), так как OrientDB пытается преобразовать строку записи карты в JSON и не удается

Есть идеи?Это специфическая проблема OrientDB?Может быть, есть другой способ выполнить ту же логику в gremlin?

1 Ответ

0 голосов
/ 12 апреля 2019

Это похоже на ошибку сериализации, но я не уверен в обстоятельствах, при которых вы работаете, чтобы решить эту проблему.Когда вы unfold() a 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))

. Мне было бы интересно узнать, по каким причинам вы получили эту ошибку.Стандартные сериализаторы GraphSON в Gremlin Server должны иметь возможность обрабатывать HashMap$Node, поэтому любопытно, что у вас вообще возникнет эта проблема.

...