Извлеките все вершины из корневой вершины, соединенной ребрами, с помощью запроса Gremlin

#json #gremlin #azure-cosmosdb-gremlinapi #gremlinnet

Вопрос:

Как я могу получить все свойства вершин, начиная с корневой вершины в запросе Gremlin?

У нас есть следующая структура:
Корневая вершина: Сотрудник

Ребра: EdCompany, EdDepartment, EdRole
Вершины: Компания, Отдел, Роль

пример графика

Мы пытаемся получить данные других вершин, соединенных с корневой вершиной. Что-то вроде этого:

 {
    "employee": [
        {
            "id": "1",
            "label": "Employee",
            "type": "vertex",
            "properties": { ... },
            "company": { 
                "id": "A220",
                "label": "Company",
                "type": "vertex",
                "properties": { ... }, 
            },
            "department": { ... },
            "edge": { ... }
        },
        { ... }
    ]
}
 

Мы пробовали этот запрос, но возвращаем сложный JSON:

 g.V().hasLabel("Employee").inE().outV().tree()
 

Редактировать:

Мы также попробовали запрос, предложенный Кельвином:

 g.V().hasLabel("Employee").inE().outV().tree().by(valueMap())  
 

экран последнего тестового изображения

Трассировка стека:
Ошибка при отправке запроса: g.V().hasLabel(«Сотрудник»).inE().outV().дерево().by(Карта значений()): Ошибка сериализации сервера: Идентификатор активности : 29f4b64e-c476-44b8-8e35-a07dd31d4242 Тип исключения : Исключение GraphSerializeException Сообщение об исключении : Ошибка сериализации Gremlin: сериализатор GraphSON V1_0 не может сериализовать объект типа: Поле карты в примитив значение для выполнения желаемого шага Гремлина

Ответ №1:

Если все, что вам нужно, — это дерево из корня, вы можете просто добавить a by(valueMap()) в свой запрос, чтобы также включить свойства. Такие как:

 g.V().hasLabel("Employee").
  inE().
  outV().
  tree().
    by(valueMap())
 

Комментарии:

1. Я попробовал ваш запрос, но он не работает. Проверьте мою правку, пожалуйста

2. Похоже, вы используете сериализатор GraphSON V1 — пожалуйста, попробуйте использовать сериализатор V3 или сериализатор GraphBinary. Дело не в запросе. Это используемый сериализатор.

3. Я не могу использовать V3, потому что Azure Cosmos DB Gremlin поддерживает только сериализатор V1/V2. Что я могу сделать в этом случае?

4. Я не уверен, что Cosmos делает и не поддерживает. Вы можете попробовать использовать только одно имя ключа свойства в качестве эксперимента, а не valueMap . Вы пробовали сериализатор V2 на всякий случай? Поддерживает ли он GraphBinary?

5. Я попробую использовать один ключ свойства, однако V2 и GraphBinary не работают. Спасибо за поддержку