Я вижу apoc.export.json.data, но не вижу полного примера рабочего кода.
Я предполагаю, что запрос MATCH позволит вам получить любой график:
MATCH g=(someNode)-[someRel]-() return g
CALL apoc.export.json.data( g )
Затем, надеюсь, APOC вернет JSON всех узлов и ребер в наборе данных, полученном в результате запроса. Ожидаемый JSON:
{
nodes:[
{ id:a1a1 , labels:[Something] , prop_a:99 },
{ id:a2a2 , labels:[Something] , prop_a:77 },
{ id:a3a3 , labels:[User] , prop_a:33 }
],
edges:[
{ id:a1a1 , labels:[OWNS] , prop_a:99 },
{ id:a2a3 , labels:[OWNS] , prop_a:77 },
{ id:a4a5 , labels:[HAS] , prop_a:33 }
]
}
Вместо использования APOC вы можете создать свой собственный вывод, как показано ниже;
MATCH g = ()-[]-()
RETURN {nodes: apoc.coll.flatten(collect(distinct nodes(g))),
edges: apoc.coll.flatten(collect(distinct relationships(g))) } as output
Я использовал версию Enterprise версии 5.4, так что она тоже должна работать.
Пример результата:
На Neo4j V5 это не работает, как в примере выше.
какая ошибка или вывод в V5? Я использую версию 4.4.
Я отредактировал свой ответ и использовал песочницу Neo4j версии 5.4.
Я тоже использую 5.4. Если вы сделаете крошечный график и посмотрите на результат JSON, исходящий от драйвера, все удвоится. Удвойте ребра, а затем удвойте узлы на каждый узел, так что 4X
Графический интерфейс Neo4J делает его похожим на возвращаемый график, но базовые данные, поступающие от драйвера, возвращают массив массивов и массив из двух узлов для каждого узла.
apoc.coll.toSet(apoc.coll.flatten(collect(nodes(g))))) возвращает желаемый результат, как в исходном примере выше, но требует apoc
Я воспользовался вашим предложением, а также добавил узлы DISTINCT (g) для удаления дубликатов. Спасибо.
Спасибо, @jose_bacoy. Действительно, было бы неплохо, если бы APOC не был необходим, так как он недоступен по умолчанию в Community Edition.
Пожалуйста, дайте нам образец ожидаемого результата. Спасибо.