#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 не работают. Спасибо за поддержку