Я использую Cosmos DB - Graph для хранения данных и разработки API для запроса графа db и возврата результатов запроса в формате ниже. API может принимать любой тип узла и идентификатор в качестве параметра и проходить через входящие и исходящие ребра, чтобы вернуть вложенные вершины и ребра.
{
"nodes":[
{"id":"1","name":"A"},
{"id":"2","name":"B"},
{"id":"3","name":"C1"},
{"id":"4","name":"C2"},
{"id":"5","name":"C3"},
{"id":"6","name":"D1"},
{"id":"7","name":"D2"},
{"id":"8","name":"D3"}
],
"edges":[
{"source":"1","target":"2"},
{"source":"2","target":"3"},
{"source":"2","target":"4"},
{"source":"2","target":"5"},
{"source":"3","target":"6"},
{"source":"4","target":"7"},
{"source":"5","target":"8"}
]
}
Пример графика:
Я новичок в запросе графа гремлина и столкнулся с проблемой прохождения через граф. У меня есть несколько образцов для входа и выхода ребер и поиска вершинного запроса. Я планирую выполнить 4 запроса для создания указанного выше формата:
Для кромок
g.V().has('name', 'A').repeat(__.bothE().where(without('e')).store('e').otherV()).cap('e')
g.V().has('name', 'A').repeat(__.inE().where(without('e')).store('e').outV()).cap('e')
Для узлов
g.V().has('name', 'A').repeat(out()).until(outE().count().is(0)).simplePath()
Я попробовал несколько примеров запроса, но не смог получить все вершины. Я ищу запрос, который возвращает все вершины или любое лучшее решение для сокращения запроса для построения вывода в формате JSON.