Gremlin / TinkerPop — PropertyMap() имеет значения, но Vertex.properties() пуста

#graph-databases #gremlin #tinkerpop #tinkerpop3

#графические базы данных #gremlin #tinkerpop #tinkerpop3

Вопрос:

Когда я это делаю g.V().propertyMap() , я могу получить свойства, сохраненные в вершинах. Однако, когда я на самом деле выполняю итерацию g.V() и пытаюсь получить свойства самостоятельно, кажется, что их нет.

Вот пример кода:

     System.out.println("propertymap: "   g.V().propertyMap());
    g.V().propertyMap().forEachRemaining(e -> System.out.println(e.toString()));
    Iterator<Vertex> vi = g.V();
    while (vi.hasNext()) {
        Vertex vertex = vi.next();
        System.out.println("keys for "   vertex.label()   ": "
                  vertex.keys()
                  " properties.hasNext: "
                  vertex.properties().hasNext());
    }
  

И соответствующий вывод:

 propertymap: [GraphStep(vertex,[]), PropertyMapStep(property)]
{Name=[vp[Name->Justin]]}
{Name=[vp[Name->Bob]]}
keys for Person: [] properties.hasNext: false
keys for Person: [] properties.hasNext: false
  

Как вы можете видеть, forEachRemaining вызов способен корректно выводить сопоставление ключа свойства со VertexProperty , который сопоставляет ключ со значением.

Но мой код для повторения одного и того же набора вершин g.V() вручную вообще не может найти никаких свойств.

Я думаю, что у меня есть некоторое базовое непонимание того, что происходит (только начал изучать, как это использовать), хотелось бы получить информацию о том, чего мне не хватает.

Ответ №1:

Нашел ответ в документах! https://tinkerpop.apache.org/docs/current/reference/#_properties_of_elements

Для запросов на основе байт-кода элементы графа имеют отсоединенную ссылку и, таким образом, возвращают только идентификатор и метку элементов. Хотя этот подход устраняет потенциальную проблему производительности, возникающую при использовании скриптового подхода, по-прежнему важно придерживаться практики конкретизации данных, которые требуются запрашивающему приложению, поскольку они не поступят на сторону клиента без этого объявления.

Кажется, что удаленные серверы возвращают урезанный результат, который не включает никаких свойств, которые явно не запрошены. Отчасти удивлен, что на этот вопрос было так сложно найти ответ, учитывая, что кажется, что это была бы довольно распространенная проблема (которую почти невозможно отладить) для новичка вроде меня, ха-ха.