Запрос возвращает неверные значения

Я тестирую и изучаю Нептун с Гремлином. Я создал несколько узлов типа User, у которых просто есть id и email. Если я сделаю для них необработанный запрос, я получу:

// http://my-neptune/?gremlin=g.V().hasLabel('User')

  "result": {
    "data": {
      "@type": "g:List",
      "@value": [
        {
          "@type": "g:Vertex",
          "@value": {
            "id": "u01",
            "label": "User",
            "properties": {
              "email": [
                {
                  "@type": "g:VertexProperty",
                  "@value": {
                    "id": {
                      "@type": "g:Int32",
                      "@value": 2051025270
                    },
                    "value": "[email protected]",
                    "label": "email"
                  }
                }
              ]
            }
          }
        },
        {
          "@type": "g:Vertex",
          "@value": {
            "id": "u02",
            "label": "User",
            "properties": {
              "email": [
                {
                  "@type": "g:VertexProperty",
                  "@value": {
                    "id": {
                      "@type": "g:Int32",
                      "@value": -374298315
                    },
                    "value": "[email protected]",
                    "label": "email"
                  }
                }
              ]
            }
          }
        }
      ]
    }

Я не хочу представлять этот график с помощью visjs. Итак, я хотел бы вернуть в основном 3 свойства для каждого узла:

  • ID
  • Ярлык (который отображается в узле, и мне нужен формат типа id - mail)
  • Группировать (группировать узлы по цвету и форме)

Для этого я выполняю следующий запрос:

g.V()
    .hasLabel('User')
    .project('id', 'label', 'group')
    .by(T.id)
    .by(
        union(id(), values('email'))
        .fold()
    )
    .by(T.label)

Но результат оказался не таким, как ожидалось. Я получаю проекцию для label правильно только для первого узла и пустую для остальных:

  "result": {
    "data": {
      "@type": "g:List",
      "@value": [
        {
          "@type": "g:Map",
          "@value": [
            "id",
            "u01",
            "label",
            {
              "@type": "g:List",
              "@value": [
                "u01",
                "[email protected]"
              ]
            },
            "group",
            "User"
          ]
        },
        {
          "@type": "g:Map",
          "@value": [
            "id",
            "u02",
            "group",
            "User",
            "label",
            {
              "@type": "g:List",
              "@value": [
                // This list should not be empty 
              ]
            }
          ]
        }
      ]
    }

Есть идеи, почему это происходит или как я могу выполнить аналогичную задачу?


person João Menighin    schedule 16.12.2019    source источник
comment
Ваши операторы by () выглядят не по порядку, если второй будет by(T.label)   -  person James Render    schedule 18.12.2019
comment
Не могли бы вы объяснить больше о том, как вы хотите сгруппировать, «по цвету и форме» меня сбивает с толку, поскольку они не являются свойствами пользовательской вершины.   -  person James Render    schedule 18.12.2019
comment
Привет, Джеймс. Цвет и форма - это свойства VisJS. Это не имеет ничего общего с самой базой данных графов. by() исправен. Я возвращаю свойства, чтобы VisJS мог нарисовать график. В VisJS свойство label имеет другое значение, чем в базе данных. В то время как база данных использует его для группировки, VisJS использует его для отображения текста для вершины.   -  person João Menighin    schedule 18.12.2019
comment
Моя точка зрения: не сосредотачивайтесь на части VisJS. Странно то, что для второго узла я получаю список пустых мест в моей проекции label, по-видимому, без причины: s   -  person João Menighin    schedule 18.12.2019
comment
не могли бы вы указать, как должен выглядеть вывод, может быть, в json, если вы не так хорошо знакомы с тем, как gremlin может выводить результаты?   -  person James Render    schedule 18.12.2019
comment
Формат в порядке. Дело в том, что на выходе отсутствуют данные. Я добавил комментарий к последнему JSON This list should not be empty. Дело в том, что с этим запросом гремлин дает мне только первый правильный результат. У тех, что находятся после, проекция label пуста, и я не понимаю, почему она пуста   -  person João Menighin    schedule 18.12.2019
comment
по совпадению у меня есть «пользовательские» вершины также со свойством «email», ваш обход прошел нормально с консоли как для gremlin-server, так и для neptune, вывод такой: == ›{id = 64730590-f661-4ddc-bb4d-1ef01a78856f, label = [64730590-f661-4ddc-bb4d-1ef01a78856f, [email protected]], group = user} == ›{id = fb5293d8-246b-4549-b665-d16e905117f3, label = [fb546293d8 -4549-b665-d16e905117f3, [email protected]], group = user} == ›{id = 7ca8b90d-e625-4cfe-8bce-ad141ef1e66f, label = [7ca8b90d-e625-4cfe-8bce-ad66 , me@ryōko.sakaki.co.jp], group = user}   -  person James Render    schedule 18.12.2019
comment
Это действительно странно: / Какую версию Neptune вы используете?   -  person João Menighin    schedule 18.12.2019
comment
dbEngine Версия: 1.0.1.0.200463.0   -  person James Render    schedule 19.12.2019
comment
Мой Neptune 1.0.2.1, db.r5. По-прежнему получаю неверный результат хм ... Попробую другой запрос   -  person João Menighin    schedule 19.12.2019
comment
Это похоже на потенциальную ошибку в последней версии движка. Вы можете сделать снимок и восстановить предыдущий выпуск 1.0.2.0. Мы работаем над исправлением.   -  person saikiranboga    schedule 19.12.2019
comment
Попробуйте обновить свой экземпляр Neptune до этой версии: docs.aws.amazon.com/neptune/latest/userguide/.   -  person Brad Bebee    schedule 24.12.2019


Ответы (1)


Добавление ответа, чтобы решение, предложенное в комментариях, могло быть принято, если упомянутая новая версия действительно устранила проблему.

Обновление экземпляра Neptune до https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.0.2.1.R4.html должно решить проблему.

person Kelvin Lawrence    schedule 03.01.2020